Tại sao không gksu / gksudo hoặc khởi chạy một ứng dụng đồ họa với sudo hoạt động với Wayland?


44

Tôi đã cài đặt Ubuntu 17.10. Bây giờ tôi gặp rắc rối với 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

Nếu tôi không sử dụng -g, hộp thoại mật khẩu sẽ bị tắt. Vì vậy, có vẻ như một vấn đề với việc tạo ra một tty cho root.

Có lời khuyên nào không?


1
gksudosẽ không hoạt động trong phiên Wayland , bạn có thể chuyển sang phiên Xorg và thử.
pomsky

2
Lỗi chính nó nếu lỗi X "không thể mở hiển thị :: 1". Wayland được thiết kế theo cách này và, theo ý kiến ​​của các nhà phát triển, bạn không nên chạy các ứng dụng đồ họa dưới dạng root từ dòng lệnh. Bạn có thể làm việc xung quanh với xhost.
Panther

1
gksu -dg synaptic Bạn không bao giờ nên làm điều đó.
Rinzwind

3
@ N0rbert ngừng thêm 17.10 vào các câu hỏi đề cập đến 17.10. Thẻ phiên bản sẽ được sử dụng nếu câu hỏi dành riêng cho bản phát hành đó. Hầu hết các câu hỏi này thường được áp dụng ở bất cứ nơi nào Wayland, Gnome Shell, v.v., và bao gồm các phiên bản trong quá khứ và tương lai.
muru

@maru. 16.04 LTS là hiện tại, 17.04 gần EOL, vì vậy 17.10 bình thường có nghĩa là Wayland và Shell Gnome mặc định, vì vậy thẻ 17.10 rất hữu ích, tôi nghĩ vậy. Rất khó để tìm câu hỏi, nơi người dùng có vấn đề với 17.10, nhưng không có câu trả lời và nhận xét nào ở đây . Họ cần câu trả lời, nhưng quên thêm thẻ 17.10 khi được hỏi. Tôi có thể ngừng thêm thẻ. Đó là một thiện chí.
N0rbert

Câu trả lời:


55

Lưu ý câu trả lời này dành riêng cho các phiên bản Ubuntu sử dụng Wayland, 17.10 là bản phát hành đầu tiên sử dụng Wayland theo mặc định.

Đây là một tính năng không phải là một lỗi! Đây là một tính năng thiết kế của Wayland mà bạn không thể khởi động các ứng dụng đồ họa như root từ thiết bị đầu cuối.

Các cuộc thảo luận chính là tất nhiên trên các trang web Fedora. Xem lỗi Fedora # 1274451các ứng dụng đồ họa không thể chạy bằng root trong wayland (ví dụ: gedit, beesu, gparted, nautilus) trên Ask Fedora . Nhưng cũng có một số cuộc thảo luận trên các trang web Ubuntu ( Ubuntu Devs không chắc chắn về việc sử dụng Wayland theo mặc định trong 17.10 - OMG! Ubuntu ).

Báo cáo lỗi Ubuntu: Không thể khởi chạy các ứng dụng pkexec'ed trên phiên Wayland

Công việc tiềm năng xung quanh - Nếu bạn đang chỉnh sửa file hệ thống với một trình soạn thảo đồ họa (như gedit) sử dụng một công cụ dòng lệnh như nanohoặc vimhoặc emacs. nanoThông thường dễ dàng hơn cho người dùng mới, vimmạnh hơn và có nhiều tính năng hơn, xem Hướng dẫn Vim này hoặc tương tự.

Ở bất kỳ giá nào, nếu bạn thực sự muốn hoặc cần chạy các ứng dụng đồ họa với quyền root , hãy đặt xhostđầu tiên, điều này buộc phải dự phòng cho Xserver.

Để thiết lập quyền chạy:

xhost si:localuser:root 

Khi bạn kết thúc, để xóa quyền

xhost -si:localuser:root 

Bạn có thể thêm tùy chọn đồ họa / máy tính để bàn để thực hiện việc này theo báo cáo lỗi synap này

các ứng dụng pkexec'ed có thể được chữa lành bằng cách xhost +si:localuser:rootđặt trong tự động khởi động XDG như sau (ý tưởng của 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

Bạn có thể thêm lệnh xhost này vào .bashrc, nhưng tôi sẽ khuyên một cặp bí danh

alias gsuon='xhost si:localuser:root'

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

Bạn có thể đặt tên cho bí danh bất cứ điều gì bạn muốn.

Để biết chi tiết, xem:


Chuyển về Xorg

Nếu bạn thích Xorg vì bất kỳ lý do gì, bạn có thể chọn chạy trên Xorg khi đăng nhập

Xem Làm thế nào để bạn chuyển từ Wayland trở lại Xorg trong Ubuntu 17.10?


Liệu cách giải quyết này có hiệu quả với Mir không?
Eliah Kagan

Tôi không biết về MIR, nó có thể.
Panther

1
Hoặc chỉxhost +local:
chaskes

18
"Đây là một tính năng không phải là một lỗi!" ... thở dài. Những thứ này chính xác là lý do tôi không thể thuyết phục bạn bè và đồng nghiệp của mình chuyển sang linux. Sử dụng VIM và Nano không phải là lựa chọn thay thế cho GEdit. Gedit hoạt động như notepad, trong khi bạn cần học mã CRTL cho những người khác. Và lấy ví dụ Nano sử dụng các thuật ngữ như "Viết ra" thay vì "Lưu" .... Rất thân thiện với người dùng.
JHBonarius

9
Điều này cũng hoàn toàn phá vỡ gparted, đó là một điều quan trọng để có quyền truy cập. Điều gì đã từng xảy ra với "Đừng cố gắng ngăn những người ngu ngốc làm những điều ngu ngốc; bạn sẽ chỉ thành công trong việc ngăn chặn những người thông minh làm những điều thông minh."?
Matthew Najmon

21

nhập mô tả hình ảnh ở đây Các giải pháp

Trong Wayland, thường rất khó để chạy các chương trình ứng dụng GUI với quyền nâng cao (sudo -H, gksu ...). Đó là một ý tưởng tốt để làm các nhiệm vụ như vậy với các công cụ dòng lệnh.

Nhưng có một cách giải quyết, nếu bạn có một công cụ GUI, nó hoạt động tốt cho bạn và cần các quyền nâng cao. (Tôi sử dụng hai công cụ tiêu chuẩn như: các Synaptic Package Manager, synapticvà các công cụ phân vùng GParted, gpartedtôi sử dụng MakeUSB để tạo ổ USB khởi động,. mkusb, Quá, nhưng nó có thể chạy những phần cần quyền cao mà không cần đồ họa.)

xhostsudo -H

  1. Có một cách giải quyết để cho phép các chương trình ứng dụng đồ họa thuộc sở hữu của người dùng khác ngoài người dùng đã đăng nhập trong Wayland,

    xhost +si:localuser:root
    
  2. gksugksudokhông được gói cùng với Ubuntu tiêu chuẩn và không hoạt động ở đây, nhưng chúng hoạt động trong Xorg.

    Thay vào đó bạn có thể sử dụng

    sudo -H
    
  3. Đó là một ý tưởng tốt để ngăn chặn các chương trình ứng dụng đồ họa thuộc sở hữu của người dùng khác ngoài người dùng đã đăng nhập sau đó,

    xhost -si:localuser:root
    

quản trị phụ trợ gvfs

Trong Ubuntu 17.10 (gvfs> = 1.29.4), bạn có thể sử dụng phụ trợ quản trị gvfs. Lưu ý rằng bạn cần đường dẫn đầy đủ,

gedit admin:///path/to/file

Về lý thuyết, phương pháp phụ trợ quản trị viên gvfs (sử dụng polkit) sẽ tốt hơn và an toàn hơn (hơn xhostxudo -H), bất kể UI bạn sử dụng là gì.

Bạn không chạy toàn bộ ứng dụng với quyền root. Sự leo thang đặc quyền chỉ xảy ra khi thực sự cần thiết. Xem các liên kết sau đây và các liên kết từ nó,

nautilus-admin

Cũng có thể sử dụng nautilus-admincho các hoạt động tập tin với quyền nâng cao và sử dụng geditvới quyền nâng cao. Điều này được mô tả trong câu trả lời AskUbfox sau đây,

Truy cập tạm thời để root vào máy tính để bàn Wayland thông qua chức năng gks

Hãy tránh sudo GUI-program. Nó có thể khiến hệ thống ghi đè lên các tệp cấu hình cho ID người dùng thông thường của bạn với rootcấu hình và đặt quyền sở hữu cũng như quyền để phù hợp rootvà khóa ID người dùng thông thường của bạn. Bạn nên chạy các ứng dụng GUI với sudo -H, ghi các tệp cấu hình trong rootthư mục chính của /root. Thí dụ:

sudo -H gedit myfile.txt

Nhưng có một rủi ro mà bạn quên -H. Thay vào đó, bạn có thể tạo một chức năng, ví dụgks

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

và lưu trữ nó trong ~/.bashrcbí danh của bạn . Sau đó bạn có thể chạy

gks gedit myfile.txt

theo cách tương tự như cách bạn đã sử dụng gksudotrước đây.

Kiểm tra

Bạn có thể kiểm tra như thế nào sudo, sudo -Hgkslàm việc với các lệnh sau

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 ~ $ 

và dĩ nhiên

gks gedit myfile.txt

theo ví dụ trong phần trước.

Phương thức hoạt động thông qua menu Alt-F2 và Gnome Shell

Thay vì thêm một chức năng một dòng đơn giản vào ~/.bashrc, bạn có thể tạo một hệ thống, cũng hoạt động mà không cần bash. Nó có thể thuận tiện để sử dụng, nhưng phức tạp hơn để thiết lập. Xin lưu ý rằng bạn chỉ nên cài đặt một trong các lựa chọn thay thế, vì chức năng một dòng sẽ làm phiền khi sử dụng hệ thống phức tạp hơn này.

Ba tập tin

Bản tóm tắt 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;

Tệp máy tính để bàn 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

Tệp biểu tượng gks.svgtrông như thế này:

nhập mô tả hình ảnh ở đây

Bạn có thể tải xuống tệp biểu tượng hoặc tarball với cả ba tệp từ liên kết này,

wiki.ubfox.com/Wayland/gks

Sao chép các tệp [giải nén hoặc sao chép và dán] vào các vị trí sau,

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

Đăng xuất / đăng nhập hoặc khởi động lại, và cần có một biểu tượng máy tính để bàn hoạt động. Nó sẽ làm việc từ một cửa sổ đầu cuối như với giải pháp đơn giản với chức năng.

Alt F2 cái hộp:

nhập mô tả hình ảnh ở đây

Menu Gnome Shell:

nhập mô tả hình ảnh ở đây

bảng điều khiển gks và gparted:

nhập mô tả hình ảnh ở đây

Tập lệnh tùy chỉnh và tập tin máy tính để bàn

Nếu bạn chỉ có một vài ứng dụng GUI, cần có quyền nâng cao, bạn có thể tạo tập lệnh tùy chỉnh và tệp máy tính để bàn cho chúng và tránh nhập lệnh (tên ứng dụng). Bạn sẽ chỉ nhập mật khẩu, điều này không khó hơn so với các phiên bản trước của Ubuntu (dù sao bạn cũng nên nhập mật khẩu).

Ví dụ với chương trình GUI đơn giản xlogođi kèm với gói chương trình x11-apps:

Shellscript gkslogo(đơn giản hóa so với 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;

Tệp máy tính để bàn 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

Tôi đã lười biếng và sử dụng cùng một tập tin biểu tượng gks.svg

Sao chép các tệp [đã sao chép & dán] vào các vị trí sau,

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

bảng điều khiển gks [logo] và xlogo:

nhập mô tả hình ảnh ở đây


Có phải "Truy cập tạm thời để root vào máy tính để bàn Wayland thông qua chức năng gks" là một phương pháp an toàn hơn (ví dụ như thêm một tệp như /etc/xdg/autostart/xhost.destopđược đề xuất) bởi vì nó kết thúc bằng cách khôi phục môi trường ban đầu? Và chúng ta có thể thay thế một cách an toàn sudo -Hbằng gksubí danh để sử dụng chèn vào các tệp .desktop, v.v. không?
Sadi

1
Có, tôi nghĩ sẽ an toàn hơn khi chỉ cho phép truy cập root vào máy tính để bàn khi cần thiết. Và có, bạn có thể thay thế sudo -Hbằng gksuchức năng, nó có thể hoạt động tốt hơn cho các ứng dụng của bạn.
sudodus

1
+1 cho câu trả lời cực kỳ kỹ lưỡng. Tương tự như gksviết tắt của bạn, tôi đã thiết lập gsuđể sử dụng bộ công cụ chính sách (tương lai mới cho 16.04) cho geditnautilus. Khi 18.04 xuất hiện mặc dù tôi nghĩ rằng tôi sẽ chỉ đặt tên cho xhost +si...tập lệnh bao bọc gksumà tôi sẽ không bao giờ cài đặt từ các gói bắt đầu bằng 18.04.
WinEunuuchs2Unix

2
"Wayland được thiết kế để không cho phép nâng cao (sudo -H, gksu ...) với các chương trình ứng dụng GUI." -- sai trái. Wayland cho phép các ứng dụng root tốt. Bạn có thể thấy điều này bằng cách chạy sudo -E gedit. Hiện tại có một lỗi trong gdmđó nó cấu hình máy chủ tương thích Xwayland X11 để không hỗ trợ XAUTHORITY, cần thiết cho các ứng dụng X11 chạy bằng root để hoạt động. Các ứng dụng wayland bản địa chạy như root hoạt động tốt.
psusi

1
@psusi, tôi đã sửa đổi câu trả lời để tránh những tuyên bố về thiết kế và ý định của Wayland.
sudodus

6

Kiểm tra tốt hơn xem wayland có thực sự chạy trước hay không trước khi cấp quyền root

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

5

Nếu bạn đang sử dụng Ubuntu 17.04 trở lên, bạn nên sử dụng phụ trợ quản trị gvfs . Chỉ cần thêm quản trị viên: // vào phía trước của filepath đầy đủ mà bạn muốn mở trong một ứng dụng như Trình soạn thảo văn bản hoặc ứng dụng Tệp .

Chẳng hạn, để thay đổi cài đặt khởi động, hãy mở

admin:///etc/default/grub

Phương pháp này sử dụng PolicyKit và vẫn sẽ hoạt động với mặc định Wayland của Ubuntu 17.10, trong khi sudo và gksu cho các ứng dụng GUI sẽ không.


1
Cảm ơn. Đối với tôi, điều này hoạt động tốt nhất với gedit (ngoại trừ một hành vi lạ khi được sử dụng đơn giản như gedit admin:), rất kỳ quặc với nautilus (gần như vô dụng), và hoàn toàn thất bại với synap . Có ý kiến ​​gì không?
Sadi

Nó sẽ không hoạt động với synap. Nó sẽ hoạt động tốt trong nautilus, nhưng bạn cần chọn một thư mục không phải là một tệp nhưadmin:///etc/
Jeremy Bícha

Nó khá hiệu quả với nautilus nhưng bạn sẽ thấy ý tôi là gì ("rất kỳ quặc", "gần như vô dụng") ngay cả khi bạn trực tiếp mở một thư mục và bắt đầu thử làm điều này và đó ;-)
Sadi

@Sadi Tôi không biết "cái này và cái kia" là gì. Bạn có thể báo lỗi nếu nó không hoạt động đúng.
Jeremy Bícha

3

Đối với các ứng dụng sử dụng su-to-root và pkexec, bạn có thể muốn thêm mã này vào /etc/xdg/autostart(xem nhận xét của tôi tại launchpad ) có nguy cơ của riêng bạn:

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

Các ứng dụng root khác cũng bị hỏng trên Wayland (xem lỗi 1713313lỗi 1713311 ).


Nếu bạn không muốn giải pháp lâu dài, bạn có thể sử dụng phương pháp của @ ravery:

chỉ cần nhập xhost +si:localuser:rootvào thiết bị đầu cuối trước khi khởi chạy ứng dụng đặc quyền


1

Nếu một ứng dụng hỗ trợ API Wayland, bạn có thể chạy nó dưới dạng root bằng sudo -EH applicationlệnh.

Công tắc -E yêu cầu sudo bảo toàn các biến môi trường (cũng như WAYLAND_SOCKET và XDG_RUNTIME_DIR) cần thiết cho các ứng dụng wayland. Luôn luôn tốt hơn để sử dụng tùy chọn này trên hack xhost khó chịu được đề xuất trong các câu trả lời khác. xhost cho phép ứng dụng chạy từ dưới X trình bao bọc kém an toàn hơn so với sử dụng Wayland (chia sẻ clipboard, keylogging, v.v.). Thủ thuật sudo -EH sẽ không hoạt động với một ứng dụng chưa được viết lại cho wayland, ví dụ như gparted, nhưng sẽ hoạt động với gedit, v.v.


0

Trên thực tế, đoạn mã sau gần như hoạt động:

#! /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 "$@"

(xin vui lòng cho tôi biết phong cách bash mã hóa ngây thơ- Tôi là một người mới với chủ đề này). T không hoạt động ổn định từ Alt-F2, nếu lựa chọn cuối cùng không phải là thiết bị đầu cuối; trong trường hợp này, chúng tôi không thể đặt tiêu điểm vào hộp thoại mật khẩu Có vẻ như nó hoạt động từ menu Gnome. Dù sao <1. Nó không phải là một giải pháp 100%. 2. Dường như với tôi, các kiến ​​trúc sư Ubuntu nghĩ rằng chúng tôi không có nghĩa vụ phải tìm kiếm bất kỳ công việc nào xung quanh ..


1
Tôi nghĩ bạn muốn "$@"(thay vì "$1" "$2" ...).
muru

Có tất nhiên :-) Đây chỉ là dấu vết của các thí nghiệm của tôi
Alex Chapiro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.