Mengapa tidak gksu / gksudo atau meluncurkan aplikasi grafis dengan sudo bekerja dengan Wayland?

44

Saya menginstal Ubuntu 17.10. Sekarang saya mengalami masalah dengan 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

Jika saya tidak menggunakan -g, dialog kata sandi dinonaktifkan. Jadi sepertinya ada masalah dengan membuat tty untuk root.

Ada saran?

Alex Chapiro
sumber
1
gksudotidak akan berfungsi dalam sesi Wayland , Anda dapat beralih ke sesi Xorg dan mencoba.
pomsky
2
Kesalahan itu sendiri jika kesalahan X "tidak dapat membuka tampilan:: 1". Wayland dirancang dengan cara ini dan, menurut pendapat para pengembang, Anda seharusnya tidak menjalankan aplikasi grafis sebagai root dari baris perintah. Anda dapat bekerja dengan xhost.
Panther
1
gksu -dg synaptic Anda seharusnya tidak melakukan itu.
Rinzwind
3
@ N0rbert berhenti menambahkan 17.10 ke pertanyaan yang menyebutkan 17.10. Tag versi harus digunakan jika pertanyaannya khusus untuk rilis itu. Sebagian besar dari pertanyaan-pertanyaan ini umumnya berlaku di mana pun Wayland, GNOME Shell, dll. Tersedia, dan itu termasuk versi masa lalu dan masa depan.
muru
@maru. 16,04 LTS saat ini, 17,04 dekat EOL, jadi normal 17,10 berarti Wayland dan default GNOME Shell, jadi tag 17,10 berguna, saya pikir. Hal ini sulit untuk menemukan pertanyaan, di mana pengguna memiliki masalah dengan 17.10, tetapi tidak memiliki jawaban dan komentar di sini . Mereka membutuhkan jawaban, tetapi lupa menambahkan tag 17,10 ketika ditanya. Saya bisa berhenti menambahkan tag. Itu niat baik.
N0rbert

Jawaban:

55

Perhatikan bahwa jawaban ini khusus untuk versi Ubuntu yang menggunakan Wayland, 17.10 menjadi rilis pertama yang menggunakan Wayland secara default.

Ini adalah fitur bukan bug! Ini adalah fitur desain dari Wayland sehingga Anda tidak dapat memulai aplikasi grafis sebagai root dari terminal.

Diskusi utama tentu saja di situs Fedora. Lihat bug Fedora # 1274451 dan Aplikasi grafis tidak dapat dijalankan sebagai root di wayland (misalnya gedit, beesu, gparted, nautilus) di Ask Fedora . Tetapi ada beberapa diskusi di situs Ubuntu juga ( Devs Ubuntu Tidak Pasti tentang Menggunakan Wayland secara Default di 17.10 - OMG! Ubuntu ).

Laporan bug Ubuntu: Tidak dapat meluncurkan aplikasi pkexec'ed pada sesi Wayland

Potensi penyelesaian - Jika Anda mengedit file sistem dengan editor grafis (seperti gedit) gunakan alat baris perintah seperti nanoatau vimatau emacs. nanobiasanya lebih mudah bagi pengguna baru, vimlebih kuat dan memiliki lebih banyak fitur, lihat Tutorial Vim ini atau yang serupa.

Bagaimanapun, jika Anda benar-benar ingin atau perlu menjalankan aplikasi grafis sebagai root , atur xhostterlebih dahulu yang memaksa mundur ke Xserver.

Untuk mengatur izin dijalankan:

xhost si:localuser:root 

Ketika Anda selesai, untuk menghapus izin

xhost -si:localuser:root 

Anda dapat menambahkan opsi grafis / desktop untuk melakukan ini sesuai laporan bug sinaptik ini

Aplikasi pkexec'ed dapat disembuhkan dengan xhost +si:localuser:rootditempatkan di autostart XDG sebagai berikut (ide 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

Anda bisa menambahkan perintah xhost ini ke .bashrc, tetapi saya akan menyarankan sepasang alias

alias gsuon='xhost si:localuser:root'

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

Anda dapat memberi nama alias apa pun yang Anda inginkan.

Untuk detailnya lihat:


Beralih kembali ke Xorg

Jika Anda lebih suka Xorg karena alasan apa pun, Anda dapat memilih untuk berjalan di Xorg saat login

Lihat Bagaimana Anda beralih dari Wayland kembali ke Xorg di Ubuntu 17.10?

Harimau kumbang
sumber
Apakah solusi ini bekerja dengan Mir juga?
Eliah Kagan
Saya tidak tahu tentang MIR, mungkin saja.
Panther
1
Atau hanyaxhost +local:
chaskes
18
"Ini adalah fitur bukan bug!" ... huh. Hal-hal semacam inilah yang menjadi alasan saya tidak dapat meyakinkan teman dan kolega saya untuk beralih ke linux. Menggunakan VIM dan Nano bukanlah alternatif untuk GEdit. Gedit berfungsi seperti notepad, sementara Anda perlu mempelajari kode CRTL untuk yang lainnya. Dan ambil misalnya Nano menggunakan istilah seperti "Tuliskan" bukannya "Simpan" .... Sangat user tidak ramah.
JHBonarius
9
Ini juga benar-benar memecah gparted, yang merupakan hal penting untuk dapat diakses. Apa yang terjadi dengan "Jangan mencoba mencegah orang bodoh melakukan hal-hal bodoh; Anda hanya akan berhasil mencegah orang pintar melakukan hal-hal yang pintar."?
Matius Najmon
21

masukkan deskripsi gambar di sini Solusi

Di Wayland seringkali sulit untuk menjalankan program aplikasi GUI dengan izin tinggi (sudo -H, gksu ...). Adalah ide yang baik untuk melakukan tugas-tugas seperti itu dengan alat-alat baris perintah.

Tetapi ada solusi, jika Anda memiliki alat GUI, yang berfungsi dengan baik untuk Anda dan membutuhkan izin yang lebih tinggi. (Saya menggunakan dua alat standar seperti: Synaptic Package Manager, synapticdan alat partisi Gparted gparted,. Saya menggunakan MakeUSB untuk membuat USB boot drive mkusb, juga, tetapi dapat menjalankan bagian-bagian yang memerlukan izin yang ditinggikan tanpa gambar.)

xhost dan sudo -H

  1. Ada solusi untuk memungkinkan program aplikasi grafis yang dimiliki oleh pengguna lain daripada pengguna yang login di Wayland,

    xhost +si:localuser:root
    
  2. gksudan gksudotidak dibundel dengan Ubuntu standar dan tidak berfungsi di sini, tetapi mereka bekerja di Xorg.

    Sebaliknya Anda bisa menggunakan

    sudo -H
    
  3. Ini adalah ide yang baik untuk mencegah program aplikasi grafis yang dimiliki oleh pengguna lain daripada pengguna yang masuk setelah itu,

    xhost -si:localuser:root
    

admin backend gvfs

Di Ubuntu 17.10 (gvfs> = 1.29.4) Anda dapat menggunakan backend admin gvfs. Perhatikan bahwa Anda memerlukan path lengkap,

gedit admin:///path/to/file

Secara teori, metode backend admin gvfs (yang menggunakan polkit) lebih baik dan lebih aman (daripada xhostdan xudo -H), terlepas dari UI yang Anda gunakan.

Anda tidak menjalankan keseluruhan aplikasi sebagai root. Eskalasi hak istimewa hanya terjadi jika benar-benar diperlukan. Lihat tautan berikut dan tautannya,

nautilus-admin

Dimungkinkan juga untuk digunakan nautilus-adminuntuk operasi file dengan izin tinggi dan untuk digunakan geditdengan izin tinggi. Ini dijelaskan dalam jawaban AskUbuntu berikut,

Akses sementara untuk root ke desktop Wayland melalui fungsi gks

Tolong hindari sudo GUI-program. Ini dapat menyebabkan sistem menimpa file konfigurasi untuk ID pengguna reguler Anda dengan rootkonfigurasi dan mengatur kepemilikan dan izin agar sesuai rootdan mengunci ID pengguna biasa Anda. Anda harus menjalankan aplikasi GUI dengan sudo -H, yang menulis file konfigurasi di rootdirektori home /root. Contoh:

sudo -H gedit myfile.txt

Namun ada risiko yang Anda lupakan -H. Sebagai gantinya, Anda dapat membuat fungsi, misalnyagks

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

dan simpan di ~/.bashrcdekat Anda alias. Maka Anda bisa lari

gks gedit myfile.txt

dengan cara yang mirip dengan cara Anda menggunakan gksudosebelumnya.

Pengujian

Anda dapat memeriksa caranya sudo, sudo -Hdan gksbekerja dengan perintah berikut

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

dan tentu saja

gks gedit myfile.txt

sesuai dengan contoh di bagian sebelumnya.

Metode yang bekerja melalui menu Alt-F2 dan Gnome Shell

Alih-alih menambahkan fungsi satu garis sederhana ~/.bashrc, Anda dapat membuat sistem, yang berfungsi juga tanpa bash. Mungkin nyaman digunakan, tetapi lebih rumit untuk diatur. Harap perhatikan bahwa Anda harus menginstal hanya salah satu alternatif, karena fungsi satu jalur akan mengganggu penggunaan sistem yang lebih rumit ini.

Tiga file

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;

File desktop 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

File ikon gks.svgterlihat seperti ini:

masukkan deskripsi gambar di sini

Anda dapat mengunduh file ikon atau tarball dengan ketiga file dari tautan ini,

wiki.ubuntu.com/Wayland/gks

Salin file [diekstraksi atau disalin & disisipkan] ke lokasi berikut,

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

Logout / login atau reboot, dan harus ada ikon desktop yang berfungsi. Ini akan bekerja dari jendela terminal seperti dengan solusi sederhana dengan fungsi.

Alt F2 kotak:

masukkan deskripsi gambar di sini

Menu Gnome Shell:

masukkan deskripsi gambar di sini

gks console dan gparted:

masukkan deskripsi gambar di sini

Script khusus dan file desktop

Jika Anda hanya memiliki beberapa aplikasi GUI, yang memerlukan izin tinggi, Anda dapat membuat skrip khusus dan file desktop untuk mereka dan menghindari memasukkan perintah (nama aplikasi). Anda hanya akan memasukkan kata sandi, yang tidak lebih sulit dibandingkan dengan versi Ubuntu sebelumnya (Anda tetap harus memasukkan kata sandi).

Contoh dengan program GUI sederhana xlogoyang datang dengan paket program x11-apps:

Shellscript gkslogo(disederhanakan dibandingkan dengan 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;

File desktop 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

Saya malas dan menggunakan file ikon yang sama gks.svg

Salin file [disalin & tempel] ke lokasi berikut,

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

gks [logo] console dan xlogo:

masukkan deskripsi gambar di sini

sudodus
sumber
Apakah "Akses sementara untuk root ke desktop Wayland melalui fungsi gks" adalah metode yang lebih aman (misalnya daripada menambahkan file seperti yang /etc/xdg/autostart/xhost.destopjuga disarankan) karena berakhir dengan mengembalikan lingkungan asli? Dan bisakah kita dengan aman menggantinya sudo -Hdengan gksualias untuk menggunakan masukkan ke file .desktop, dll.?
Sadi
1
Ya, saya akan berpikir lebih aman untuk mengizinkan akses root ke desktop hanya jika diperlukan. Dan ya, Anda dapat menggantinya sudo -Hdengan gksufungsi tersebut, mungkin berfungsi lebih baik untuk aplikasi Anda.
sudodus
1
+1 untuk jawaban yang sangat teliti. Mirip dengan gkssingkatan Anda, saya telah menyiapkan gsuuntuk menggunakan kit kebijakan (masa depan baru untuk 16.04) untuk geditdan nautilus. Ketika 18.04 keluar, saya pikir saya hanya akan memberi nama xhost +si...skrip pembungkus gksuyang saya tidak akan pernah menginstal dari paket dimulai dengan 18.04.
WinEunuuchs2Unix
2
"Wayland dirancang untuk tidak mengizinkan izin tinggi (sudo -H, gksu ...) dengan program aplikasi GUI." -- Salah. Wayland memungkinkan aplikasi root dengan baik. Anda dapat melihat ini dengan menjalankan sudo -E gedit. Saat ini ada bug di gdmmana ia mengkonfigurasi server kompatibilitas Xwayland X11 untuk tidak mendukung XAUTHORITY, yang diperlukan untuk aplikasi X11 berjalan sebagai root untuk bekerja. Aplikasi wayland asli berjalan sebagai root bekerja dengan baik.
psusi
1
@psusi, saya memodifikasi jawaban untuk menghindari pernyataan tentang desain dan maksud Wayland.
sudodus
6

Lebih baik memeriksa apakah wayland benar-benar berjalan terlebih dahulu sebelum memberikan root

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

Jika Anda menggunakan Ubuntu 17.04 atau lebih tinggi, disarankan untuk menggunakan backend admin gvfs . Cukup tambahkan admin: // ke bagian depan file penuh yang ingin Anda buka di aplikasi seperti Editor Teks atau aplikasi File .

Misalnya, untuk mengubah pengaturan boot, buka

admin:///etc/default/grub

Metode ini menggunakan PolicyKit dan masih akan bekerja dengan standar Wayland Ubuntu 17.10, sedangkan sudo dan gksu untuk aplikasi GUI tidak.

Jeremy Bicha
sumber
1
Terima kasih. Bagi saya ini bekerja paling baik dengan gedit (kecuali perilaku aneh ketika digunakan hanya sebagai gedit admin:), sangat aneh dengan nautilus (hampir tidak berguna), dan sama sekali gagal dengan sinaptik . Ada ide?
Sadi
Itu tidak akan bekerja dengan sinaptik. Seharusnya bekerja dengan baik di nautilus, tetapi Anda harus memilih direktori bukan file sepertiadmin:///etc/
Jeremy Bicha
Ini semacam bekerja dengan nautilus tetapi Anda akan melihat apa yang saya maksud ("sangat aneh", "hampir tidak berguna") bahkan ketika Anda langsung membuka direktori, dan mulai mencoba melakukan ini dan itu ;-)
Sadi
@Sadi saya tidak tahu apa itu "ini dan itu". Anda dapat mengajukan bug jika tidak berfungsi dengan benar.
Jeremy Bicha
3

Untuk aplikasi yang menggunakan su-to-root dan pkexec Anda mungkin ingin menambahkan kode ini /etc/xdg/autostart(lihat komentar saya di launchpad ) dengan risiko Anda sendiri:

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

Aplikasi root lainnya juga rusak di Wayland (lihat bug 1713313 dan bug 1713311 ).


Jika Anda tidak menginginkan solusi permanen, Anda dapat menggunakan metode @ ravery:

cukup ketik xhost +si:localuser:rootterminal sebelum meluncurkan aplikasi istimewa

Nrbert
sumber
1

Jika aplikasi mendukung Wayland API, Anda dapat menjalankannya sebagai root menggunakan sudo -EH applicationperintah.

Switch -E memberi tahu sudo untuk melestarikan variabel lingkungan (serta WAYLAND_SOCKET dan XDG_RUNTIME_DIR) yang diperlukan untuk aplikasi darat. Itu selalu lebih baik untuk menggunakan opsi ini dari peretasan xhost jahat yang diusulkan dalam jawaban lain. xhost memungkinkan aplikasi untuk dijalankan dari bawah pembungkus X yang kurang aman daripada menggunakan Wayland (clipboard bersama, keylogging dll). Trik sudo -EH tidak akan bekerja dengan aplikasi yang belum ditulis ulang untuk wayland, seperti gparted misalnya, tetapi akan bekerja dengan gedit dll.

ZAB
sumber
0

Sebenarnya kode berikut hampir berfungsi:

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

(permisi untuk gaya naif dari bash coding - saya semacam pemula dengan subjek ini). T tidak berfungsi dengan stabil dari Alt-F2, jika pilihan terakhir bukan terminal; dalam hal ini kita tidak bisa mengatur fokus ke dialog kata sandi. Sepertinya itu berfungsi dari menu Gnome. Pokoknya <1. Ini bukan solusi 100%. 2. Menurut saya para arsitek Ubuntu berpikir bahwa kita tidak seharusnya mencari pekerjaan di sekitar ..

Alex Chapiro
sumber
1
Saya pikir Anda ingin "$@"(bukan "$1" "$2" ...).
muru
Ya tentu saja :-) Ini hanya jejak percobaan saya
Alex Chapiro