ทำไมไม่ gksu / gksudo หรือเปิดตัวกราฟิกแอปพลิเคชันที่มี sudo ทำงานร่วมกับ Wayland?


44

ฉันติดตั้ง Ubuntu 17.10 ตอนนี้ฉันมีปัญหากับgksu:

$ gksu -dg synaptic
No ask_pass set, using default!
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
STARTUP_ID: gksu/synaptic/8760-0-alex-XPS-15-9530_TIME4974977
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: root
cmd[7]: --
cmd[8]: synaptic
buffer: -GNOME_SUDO_PASS-
brute force GNOME_SUDO_PASS ended...
Yeah, we're in...
Unable to init server: Could not connect: Connection refused
(synaptic:8767): Gtk-WARNING **: cannot open display: :1
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
xauth_env: (null)
dir: /tmp/libgksu-HgUjgQ

หากฉันไม่ได้ใช้-gไดอะล็อกรหัสผ่านจะถูกปิดการใช้งาน ดูเหมือนปัญหาในการสร้าง tty สำหรับรูท

คำแนะนำใด ๆ?


1
gksudoจะไม่ทำงานในเซสชัน Waylandคุณสามารถเปลี่ยนไปใช้เซสชัน Xorgและลอง
pomsky

2
ข้อผิดพลาดเองหากข้อผิดพลาด X "ไม่สามารถเปิดจอแสดงผล:: 1" Wayland ได้รับการออกแบบในลักษณะนี้และในความเห็นของนักพัฒนาคุณไม่ควรใช้งานกราฟิกแอปพลิเคชันในฐานะรูทจากบรรทัดคำสั่ง คุณสามารถทำงานกับ xhost ได้
Panther

1
gksu -dg synaptic คุณไม่ควรทำอย่างนั้นเลย
Rinzwind

3
@ N0rbert หยุดเพิ่ม17.10ในคำถามที่กล่าวถึง 17.10 แท็กเวอร์ชันจะใช้หากคำถามเฉพาะกับรุ่นนั้น โดยทั่วไปแล้วคำถามเหล่านี้ส่วนใหญ่ใช้ได้กับทุกที่ที่มี Wayland, GNOME Shell และรวมถึงรุ่นในอดีตและในอนาคต
muru

@maru 16.04 LTS เป็นปัจจุบัน 17.04 อยู่ใกล้ EOL ดังนั้นปกติ 17.10 หมายถึง Wayland และ GNOME Shell เริ่มต้นดังนั้นแท็ก 17.10จึงมีประโยชน์ฉันคิดว่า มันเป็นเรื่องยากที่จะหาคำถามที่ผู้ใช้มีปัญหากับ 17.10 แต่ไม่มีคำตอบและความคิดเห็นที่นี่ พวกเขาต้องการคำตอบ แต่ลืมเพิ่ม 17.10 แท็กเมื่อถูกถาม ฉันสามารถหยุดเพิ่มแท็กได้ มันเป็นความปรารถนาดี
N0rbert

คำตอบ:


55

หมายเหตุคำตอบนี้เฉพาะกับ Ubuntu รุ่นที่ใช้ Wayland, 17.10 เป็นรุ่นแรกที่ใช้ Wayland โดยค่าเริ่มต้น

มันเป็นคุณสมบัติที่ไม่ได้เป็นข้อผิดพลาด! มันเป็นคุณสมบัติการออกแบบของ Wayland ที่คุณไม่สามารถเริ่มใช้งานแอปพลิเคชันแบบกราฟิกในฐานะรูทจากเทอร์มินัล

แน่นอนการอภิปรายหลักอยู่ที่เว็บไซต์ Fedora ดูFedora ข้อผิดพลาด # 1274451และกราฟิกการใช้งานไม่สามารถทำงานเป็นรากใน Wayland (เช่น Gedit, beesu, GParted หอยโข่ง) บน Ask Fedora แต่ก็มีการพูดคุยกันเกี่ยวกับเว็บไซต์ของ Ubuntu เช่นกัน ( Ubuntu Devs ไม่แน่ใจเกี่ยวกับการใช้ Wayland โดยค่าเริ่มต้นใน 17.10 - OMG! Ubuntu )

รายงานข้อผิดพลาดของ Ubuntu: ไม่สามารถเปิดแอปพลิเคชัน pkexec'ed ในเซสชัน Wayland

การทำงานที่มีศักยภาพรอบ - หากคุณกำลังแก้ไขไฟล์ระบบด้วยโปรแกรมแก้ไขกราฟิก (เช่น Gedit) การใช้เครื่องมือบรรทัดคำสั่งเช่นnanoหรือหรือvim โดยทั่วไปแล้วจะง่ายขึ้นสำหรับผู้ใช้ใหม่มีประสิทธิภาพมากขึ้นและมีคุณสมบัติมากขึ้นดูVim Tutorial นี้หรือคล้ายกันemacsnanovim

ถ้าคุณต้องการหรือต้องการรันแอพกราฟิกในฐานะที่เป็น rootให้ตั้งค่าxhostก่อนซึ่งบังคับให้ถอยกลับไปที่ Xserver

วิธีตั้งค่าการอนุญาตใช้งาน:

xhost si:localuser:root 

เมื่อเสร็จแล้วให้ลบการอนุญาต

xhost -si:localuser:root 

คุณสามารถเพิ่มตัวเลือกกราฟิก / เดสก์ท็อปเพื่อทำตามรายงานข้อผิดพลาด synaptic นี้

แอปพลิเคชัน pkexec'ed อาจได้รับการรักษาด้วยการxhost +si:localuser:rootวางใน XDG autostart ดังต่อไปนี้ (ความคิดของ N0rbert):

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

คุณสามารถเพิ่มคำสั่ง xhost นี้ลงใน. bashrc แต่ฉันจะแนะนำคู่นามแฝง

alias gsuon='xhost si:localuser:root'

alias gsuoff='xhost -si:localuser:root'

คุณสามารถตั้งชื่อแทนสิ่งที่คุณต้องการ

ดูรายละเอียดได้ที่:


เปลี่ยนกลับเป็น Xorg

หากคุณต้องการ Xorg ด้วยเหตุผลใดก็ตามคุณสามารถเลือกที่จะทำงานบน Xorg ที่ล็อกอิน

ดูคุณจะเปลี่ยนจาก Wayland กลับไปเป็น Xorg ใน Ubuntu 17.10 ได้อย่างไร


วิธีแก้ปัญหานี้ทำงานกับ Mirด้วยหรือไม่
Eliah Kagan

ฉันไม่ทราบเกี่ยวกับ MIR มันอาจ
Panther

1
หรือเพียงแค่xhost +local:
chaskes

18
"มันเป็นคุณสมบัติที่ไม่ผิดพลาด!" ... ถอนหายใจ สิ่งเหล่านี้เป็นเหตุผลที่ฉันไม่สามารถโน้มน้าวให้เพื่อนและเพื่อนร่วมงานเปลี่ยนมาใช้ linux ได้ การใช้ VIM และนาโนไม่ใช่ทางเลือกอื่นสำหรับ GEdit Gedit ทำงานเหมือน Notepad ในขณะที่คุณต้องเรียนรู้รหัส CRTL สำหรับคนอื่น ๆ และยกตัวอย่างเช่นนาโนโดยใช้คำเช่น "เขียนออก" แทน "บันทึก" .... ผู้ใช้ไม่เป็นมิตรมาก
JHBonarius

9
นี่ก็เป็นการแยกส่วนที่สมบูรณ์ซึ่งเป็นสิ่งสำคัญที่จะต้องเข้าถึง เกิดอะไรขึ้นกับ "อย่าพยายามป้องกันคนโง่จากการทำสิ่งที่โง่คุณจะประสบความสำเร็จในการป้องกันไม่ให้คนฉลาดทำสิ่งที่ฉลาด"?
Matthew Najmon

21

ป้อนคำอธิบายรูปภาพที่นี่ โซลูชั่น

ใน Wayland มักจะยากที่จะเรียกใช้โปรแกรมแอปพลิเคชัน GUI ที่มีสิทธิ์ระดับสูง (sudo -H, gksu ... ) เป็นความคิดที่ดีที่จะทำงานกับเครื่องมือบรรทัดคำสั่ง

แต่มีวิธีแก้ไขหากคุณมีเครื่องมือ GUI ที่ใช้งานได้ดีสำหรับคุณและต้องได้รับการยกระดับสิทธิ์ (ฉันใช้เครื่องมือมาตรฐานสองอย่าง: Synaptic Package Manager synapticและเครื่องมือการแบ่งพาร์ติชัน Gparted, gpartedฉันใช้ MakeUSB เพื่อสร้างไดรฟ์สำหรับบูต USB mkusbด้วย แต่สามารถเรียกใช้ส่วนที่ต้องได้รับการยกระดับโดยไม่ต้องใช้กราฟิก)

xhost และ sudo -H

  1. มีวิธีแก้ปัญหาเพื่อให้โปรแกรมกราฟิกเป็นเจ้าของโดยผู้ใช้อื่นนอกเหนือจากผู้ใช้ที่เข้าสู่ระบบใน Wayland

    xhost +si:localuser:root
    
  2. gksuและgksudoไม่ได้รวมอยู่ใน Ubuntu มาตรฐานและไม่ทำงานที่นี่ แต่ใช้งานได้ใน Xorg

    แต่คุณสามารถใช้

    sudo -H
    
  3. เป็นความคิดที่ดีที่จะป้องกันไม่ให้โปรแกรมแอปพลิเคชันกราฟิกเป็นเจ้าของโดยผู้ใช้รายอื่นนอกเหนือจากผู้ใช้ที่ล็อกอินหลังจากนั้น

    xhost -si:localuser:root
    

แบ็กเอนด์ผู้ดูแลระบบ gvfs

ใน Ubuntu 17.10 (gvfs> = 1.29.4) คุณสามารถใช้แบ็กเอนด์ผู้ดูแลระบบ gvfs ขอให้สังเกตว่าคุณต้องการเส้นทางแบบเต็ม

gedit admin:///path/to/file

ในทางทฤษฎีแล้ววิธีการแบ็กเอนด์ gvfs admin (ซึ่งใช้ polkit) ดีกว่าและปลอดภัยกว่า ( xhostและxudo -H) โดยไม่คำนึงถึง UI ที่คุณใช้

คุณไม่ได้รันแอปพลิเคชันทั้งหมดในฐานะรูท การเพิ่มระดับสิทธิ์จะเกิดขึ้นเฉพาะเมื่อจำเป็นเท่านั้น ดูลิงค์ต่อไปนี้และลิงค์จากมัน

หอยโข่งผู้ดูแลระบบ

นอกจากนี้ยังเป็นไปได้ที่จะใช้nautilus-adminสำหรับการดำเนินการกับไฟล์ที่มีสิทธิ์ยกระดับและใช้geditกับสิทธิ์ยกระดับ นี่คือคำอธิบายในคำตอบ AskUbuntu ต่อไปนี้

การเข้าถึงรูทไปยังเดสก์ท็อป Wayland ชั่วคราวผ่านฟังก์ชั่น gks

sudo GUI-programหลีกเลี่ยงโปรด มันอาจทำให้ระบบเขียนทับไฟล์กำหนดค่าสำหรับ ID ผู้ใช้ปกติของคุณด้วยrootการกำหนดค่าและตั้งค่าความเป็นเจ้าของและการอนุญาตให้เหมาะสมrootและล็อค ID ผู้ใช้ปกติของคุณ คุณควรรันแอพพลิเคชั่น GUI ด้วยsudo -Hซึ่งจะเขียนไฟล์การกำหนดค่าในrootโฮมไดเร็/rootกตอรี่ของ ตัวอย่าง:

sudo -H gedit myfile.txt

-Hแต่มีความเสี่ยงที่คุณลืม ตัวอย่างเช่นคุณสามารถสร้างฟังก์ชันได้gks

gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }

และเก็บไว้~/.bashrcใกล้นามแฝงของคุณ จากนั้นคุณสามารถเรียกใช้

gks gedit myfile.txt

ในแบบที่คุณเคยใช้มาgksudoก่อน

การทดสอบ

คุณสามารถตรวจสอบวิธีการsudo, sudo -Hและgksการทำงานที่มีคำสั่งดังต่อไปนี้

sudodus@xenial32 ~ $ sudo bash -c "echo ~"
/home/sudodus
sudodus@xenial32 ~ $ sudo -H bash -c "echo ~"
/root
sudodus@xenial32 ~ $ gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
sudodus@xenial32 ~ $ gks bash -c "echo ~"
localuser:root being added to access control list
/root
localuser:root being removed from access control list
sudodus@xenial32 ~ $ 

และแน่นอนว่า

gks gedit myfile.txt

ตามตัวอย่างในส่วนก่อนหน้า

วิธีการที่ทำงานผ่านเมนู Alt-F2 และ Gnome Shell

แทนที่จะเพิ่มฟังก์ชั่นหนึ่งบรรทัดง่ายๆ~/.bashrcคุณสามารถสร้างระบบที่ใช้งานได้โดยไม่ต้องทุบตี อาจสะดวกในการใช้งาน แต่มีความซับซ้อนในการตั้งค่า โปรดสังเกตว่าคุณควรติดตั้งทางเลือกเดียวเท่านั้นเนื่องจากฟังก์ชั่นหนึ่งบรรทัดจะรบกวนการใช้งานระบบที่ซับซ้อนกว่านี้

สามไฟล์

The shellscript gks:

#!/bin/bash

xhost +si:localuser:root

if [ $# -eq 0 ]
then
  xterm -T "gks console - enter command and password" \
  -fa default -fs 14 -geometry 60x4 \
  -e bash -c 'echo "gks lets you run command lines with GUI programs
with temporary elevated permissions in Wayland."; \
read -p "Enter command: " cmd; \
cmdfile=$(mktemp); echo "$cmd" > "$cmdfile"; \
sudo -H bash "$cmdfile"; rm "$cmdfile"'
else
 xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H "$@"
fi 

xhost -si:localuser:root;

ไฟล์เดสก์ท็อปgks.desktop:

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gks
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gks %f
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

ไฟล์ไอคอนgks.svgมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถดาวน์โหลดไฟล์ไอคอนหรือ tarball ที่มีทั้งสามไฟล์ได้จากลิงค์นี้

wiki.ubuntu.com/Wayland/gks

คัดลอกไฟล์ [แยกหรือคัดลอก & วาง] ไปยังตำแหน่งต่อไปนี้

sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons

ออกจากระบบ / เข้าสู่ระบบหรือรีบูตและควรมีไอคอนเดสก์ท็อปที่ใช้งานได้ มันจะทำงานจากหน้าจอเทอร์มินัลเหมือนกับโซลูชันที่เรียบง่ายพร้อมฟังก์ชั่น

Alt F2 กล่อง:

ป้อนคำอธิบายรูปภาพที่นี่

เมนู Gnome Shell:

ป้อนคำอธิบายรูปภาพที่นี่

gks console และ gparted:

ป้อนคำอธิบายรูปภาพที่นี่

สคริปต์ที่กำหนดเองและไฟล์เดสก์ทอป

หากคุณมีแอปพลิเคชั่น GUI เพียงไม่กี่ตัวที่ต้องการการยกระดับคุณสามารถสร้างสคริปต์ที่กำหนดเองและไฟล์เดสก์ท็อปสำหรับพวกเขาและหลีกเลี่ยงการป้อนคำสั่ง (ชื่อแอปพลิเคชัน) คุณจะป้อนรหัสผ่านเท่านั้นซึ่งไม่ยากขึ้นเมื่อเทียบกับ Ubuntu รุ่นก่อนหน้า (คุณควรป้อนรหัสผ่านต่อไป)

ตัวอย่างด้วยโปรแกรม GUI อย่างง่ายxlogoที่มาพร้อมกับแพ็คเกจโปรแกรมx11-apps:

shellscript gkslogo(ง่ายกว่าเมื่อเทียบกับgks)

#!/bin/bash

xhost +si:localuser:root

xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H xlogo

xhost -si:localuser:root;

ไฟล์เดสก์ท็อปgkslogo.desktop:

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gkslogo
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gkslogo
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

ฉันขี้เกียจและใช้ไฟล์ไอคอนเดียวกัน gks.svg

คัดลอกไฟล์ [คัดลอก & วาง] ไปยังตำแหน่งต่อไปนี้

sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/

gks [โลโก้] คอนโซลและ xlogo:

ป้อนคำอธิบายรูปภาพที่นี่


"การเข้าถึงชั่วคราวสำหรับรูทไปยังเดสก์ท็อป Wayland ผ่านฟังก์ชัน gks" เป็นวิธีที่ปลอดภัยกว่า (เช่นการเพิ่มไฟล์/etc/xdg/autostart/xhost.destopตามที่แนะนำ) เพราะจะจบลงด้วยการกู้คืนสภาพแวดล้อมดั้งเดิมหรือไม่ และเราสามารถแทนที่sudo -Hด้วยgksuนามแฝงอย่างปลอดภัยเพื่อใช้แทรกลงในไฟล์ .desktop ฯลฯ ได้หรือไม่
Sadi

1
ใช่ฉันคิดว่าปลอดภัยกว่าที่จะอนุญาตการเข้าถึงรูทบนเดสก์ท็อปเมื่อจำเป็นเท่านั้น และใช่คุณสามารถแทนที่sudo -Hด้วยgksuในฟังก์ชั่นมันอาจทำงานได้ดีขึ้นสำหรับการใช้งานของคุณ
sudodus

1
+1 สำหรับคำตอบที่ละเอียดมาก คล้ายกับของคุณgksย่อฉันมีการตั้งค่าgsuที่จะใช้ชุดนโยบาย (อนาคตใหม่สำหรับ16.04) สำหรับและgedit nautilusเมื่อ 18.04 ออกมา แต่ผมคิดว่าผมก็จะตั้งชื่อxhost +si...สคริปต์เสื้อคลุมซึ่งผมจะไม่ติดตั้งแพ็กเกจเริ่มต้นด้วยgksu 18.04
WinEunuuchs2Unix

2
"Wayland ออกแบบมาเพื่อไม่อนุญาตการอนุญาตระดับสูง (sudo -H, gksu ... ) ด้วยโปรแกรมแอปพลิเคชัน GUI" - เท็จ Wayland อนุญาตให้แอปพลิเคชั่นรูทใช้ได้ดี sudo -E geditคุณสามารถดูนี้โดยการเรียกใช้ ขณะนี้มีข้อผิดพลาดgdmที่จะกำหนดค่าเซิร์ฟเวอร์ความเข้ากันได้ Xwayland X11 เพื่อไม่สนับสนุน XAUTHORITY ซึ่งจำเป็นสำหรับแอปพลิเคชัน X11 ที่ทำงานเป็นรูทเพื่อทำงาน แอพพลิเคชั่นเวย์แลนด์แบบดั้งเดิมทำงานได้ดีในฐานะรูท
psusi

1
@psusi ฉันแก้ไขคำตอบเพื่อหลีกเลี่ยงข้อความเกี่ยวกับการออกแบบและความตั้งใจของ Wayland
sudodus

6

ตรวจสอบได้ดีกว่าว่า Wayland ทำงานจริงๆก่อนที่จะให้สิทธิ์ใช่ไหม

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi

5

หากคุณกำลังใช้อูบุนตู 17.04หรือสูงกว่าก็จะแนะนำให้ใช้gvfs แบ็กเอนด์ผู้ดูแลระบบ เพียงแค่เพิ่มผู้ดูแลระบบ: //ไปยังด้านหน้าของ filepath เต็มรูปแบบที่คุณต้องการจะเปิดใน app เช่นที่แก้ไขข้อความหรือปพลิเคชันไฟล์

ตัวอย่างเช่นหากต้องการเปลี่ยนการตั้งค่าการบูตให้เปิด

admin:///etc/default/grub

วิธีนี้ใช้ PolicyKit และจะยังคงทำงานกับค่าเริ่มต้น Wayland ของ Ubuntu 17.10 ในขณะที่ sudo และ gksu สำหรับแอป GUI จะไม่ทำงาน


1
ขอบคุณ สำหรับฉันนี้ทำงานได้ดีที่สุดกับGedit (ยกเว้นพฤติกรรมแปลก ๆ เมื่อนำมาใช้ก็เป็นgedit admin:) อย่างผิดปกติกับหอยโข่ง (เกือบไร้ประโยชน์) และล้มเหลวโดยสิ้นเชิงกับsynaptic ความคิดใด ๆ
Sadi

มันจะไม่ทำงานกับ synaptic มันควรจะทำงานได้ดีในหอยโข่ง แต่คุณต้องเลือกไดเรกทอรีไม่ใช่ไฟล์เช่นadmin:///etc/
Jeremy Bicha

มันทำงานได้ดีกับหอยทากแต่คุณจะเห็นสิ่งที่ฉันหมายถึง ("แปลกมาก", "ไร้ประโยชน์เกือบ") แม้ว่าคุณจะเปิดไดเรกทอรีโดยตรงและเริ่มพยายามทำเช่นนั้นและ ;-)
Sadi

@Sadi ฉันไม่รู้ว่า "นี่มันอะไรกัน" และนั่นก็คือ คุณสามารถยื่นบั๊กได้หากมันทำงานไม่ถูกต้อง
Jeremy Bicha

3

สำหรับแอปพลิเคชันที่ใช้ su-to-root และ pkexec คุณอาจต้องการเพิ่มรหัสนี้ลงใน/etc/xdg/autostart(ดูความคิดเห็นของฉันที่ Launchpad ) โดยยอมรับความเสี่ยงของคุณเอง:

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

แอปพลิเคชั่นรูทอื่น ๆ จะแตกบน Wayland ด้วย (ดูbug 1713313และbug 1713311 )


หากคุณไม่ต้องการทางออกถาวรคุณสามารถใช้วิธีการของ @ ravery:

เพียงพิมพ์xhost +si:localuser:rootเทอร์มินัลก่อนเรียกใช้แอปพลิเคชันพิเศษ


1

หากแอปพลิเคชันรองรับ Wayland API คุณสามารถเรียกใช้เป็นรูทโดยใช้sudo -EH applicationคำสั่ง

สวิตช์ -E บอก sudo เพื่อรักษาตัวแปรสภาพแวดล้อม (รวมถึง WAYLAND_SOCKET และ XDG_RUNTIME_DIR) ที่จำเป็นสำหรับแอปพลิเคชัน wayland เป็นการดีกว่าเสมอที่จะใช้ตัวเลือกนี้ในการแฮ็ก xhost ที่น่ารังเกียจที่เสนอในคำตอบอื่น ๆ xhost อนุญาตให้แอปพลิเคชันเรียกใช้จากภายใต้ X wrapper ซึ่งมีความปลอดภัยน้อยกว่าการใช้ Wayland (คลิปบอร์ดที่ใช้ร่วมกัน, การล็อกคีย์เป็นต้น) เคล็ดลับ sudo -EH จะไม่ทำงานกับแอปพลิเคชันที่ไม่ได้เขียนใหม่สำหรับ wayland เช่น gparted แต่จะทำงานกับ gedit เป็นต้น


0

รหัสต่อไปนี้ใช้งานได้จริง:

#! /bin/bash
set -e 
if [ -z "$1" ] ; then
    echo "Application is not specified" ;  exit
fi 
if [ $XDG_SESSION_TYPE = "wayland" ]; then
    if [[ -t 1 ]]; then
       xhost +si:localuser:root
       sudo -u root "$@"
       xhost  -  
       exit 0
    fi 
fi
gksu "$@"

(โปรดยกโทษให้ฉันสำหรับการเขียนโค้ดแบบทุบตีไร้เดียงสา - ฉันเป็นมือใหม่ในเรื่องนี้) T ไม่ทำงานอย่างมีเสถียรภาพจาก Alt-F2 หากการเลือกครั้งสุดท้ายไม่ใช่เทอร์มินัล ในกรณีนี้เราไม่สามารถตั้งค่าโฟกัสไปที่กล่องโต้ตอบรหัสผ่านดูเหมือนว่าจะใช้งานได้จากเมนู Gnome อย่างไรก็ตาม <1 มันไม่ใช่วิธีการแก้ปัญหา 100% 2. สำหรับฉันแล้วดูเหมือนว่าสถาปนิกของอูบุนตูคิดว่าเราไม่ควรที่จะค้นหาสิ่งใด ๆ


1
ฉันคิดว่าคุณต้องการ"$@"(แทน"$1" "$2" ...)
muru

ใช่แน่นอน :-) นี่เป็นเพียงร่องรอยของการทดลองของฉัน
Alex Chapiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.