Ketika saya mencoba untuk membuka Evince dari baris perintah, itu memberi saya kesalahan
neo@Muhammad:~$ sudo evince
No protocol specified
** (evince:4164): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Cannot parse arguments: Cannot open display:
Bagaimana cara mengatasi masalah ini?
command-line
sudo
evince
Muhammad Iliyas
sumber
sumber
Jawaban:
Hal pertama yang pertama: XDG_RUNTIME_DIR
Untuk menjawab pertanyaan pertama Anda, "Apa itu XDG_RUNTIME_DIR?" , ini adalah variabel lingkungan yang diatur secara otomatis ketika Anda masuk. Ini memberitahu program apa pun yang Anda jalankan di mana menemukan direktori khusus pengguna di mana ia dapat menyimpan file sementara kecil. Catatan yang
XDG_RUNTIME_DIR
ditetapkan olehpam_systemd
(8) , sehingga tidak benar-benar terkait dengan X (menjalankan program secara grafis), yang merupakan masalah yang tampaknya Anda alami.Cara mengatasi masalah
Pertanyaan kedua Anda, "Bagaimana cara mengatasi masalah ini?" adalah yang sangat bagus. Itu berarti Anda tertarik tidak hanya apa yang memperbaiki, tapi juga bagaimana untuk mencari tahu sendiri. Untuk memulai, lihat pesan kesalahan pertama terlebih dahulu. Secara khusus, mencari
No protocol specified
atauWARNING **: Could not open X display
, akan menunjukkan kepada Anda bahwa masalahnya ada pada X (juga disebut The X Windowing System ) yang merupakan bagaimana program grafis ditampilkan di layar Anda. Mengetahui hal itu seharusnya memunculkan banyak pertanyaan pemecahan masalah dalam pikiran Anda.X TAMPILAN
Mungkin pertanyaan Anda selanjutnya adalah, "tampilan X" apa yang tidak bisa dibuka oleh siapa pun ? "Tampilan" adalah alamat untuk layar Anda. [*] Setiap program yang ingin menulis ke layar Anda harus mengetahui alamatnya. Anda dapat melihat apa tampilan X Anda dengan memeriksa variabel lingkungan DISPLAY:
Dan Anda dapat memeriksa apa yang
sudo
menurut DISPLAY Anda dengan mengetik:Jika tidak menunjukkan apa-apa, maka itu masalahnya. (Lihat perbaikan di bawah).
XAUTHORITY
Tapi, bagaimana jika itu bukan masalah dan
DISPLAY
diatur dengan benarsudo
? Maka Anda mungkin bertanya-tanya, apakah X memiliki semacam izin yang mencegah pengguna lain menulis di layar saya? Jika Anda berpikir demikian, Anda akan benar, X memiliki dua metode otorisasi utama:xauth
danxhost
. Yang paling umum digunakan saat ini adalahxauth
(1) yang menggunakanXAUTHORITY
variabel lingkungan. Sekali lagi, mari kita periksa apakah sudah diatur dengan benarsudo
:Jika
XAUTHORITY
menunjuk ke sebuah file di direktori home Anda untuk Anda, tetapi itu kosong ketika Anda menjalankansudo
, maka itulah masalahnya.FIX: Simpan Variabel Lingkungan
Jadi, apa masalahnya? Jika variabel lingkungan
DISPLAY
atauXAUTHORITY
tidak diselamatkan di seluruhsudo
, Anda dapat memberitahusudo
(8) untuk melestarikan lingkungan dengan menggunakan-E
opsi, seperti:Cara yang lebih baik: env_keep
Anda mungkin bertanya, Tunggu, jika
-E
membuat semuanya berfungsi secara ajaib, lalu mengapa itu bukan default untuksudo
? Jawabannya adalah bahaya keamanan potensial. Variabel lingkungan memengaruhi cara kerja program dan Anda tidak ingin semuanya diekspor dari akun pengguna ke root. Cara "benar" untuk melakukannya adalah dengan menambahkan barisDefaults env_keep += "DISPLAY XAUTHORITY"
ke filesudoers
(5) menggunakanvisudo
(8) . Anda dapat memeriksa variabel lingkungan yang dipertahankan oleh sudo dengan menjalankan:(Ya, Anda mengetik
sudo
dua kali). Saya sarankan meletakkan baris tidak di file sudoers default (/etc/sudoers
), tetapi dalam file lokal yang tidak akan ditimpa ketika Anda memutakhirkan sistem Anda. Anda dapat melakukannya seperti itu:Tapi tunggu, bagaimana jika tidak ada yang bekerja di atas?
Saya pikir ini adalah jawaban yang cukup menyeluruh, tetapi jika Anda masih mengalami masalah, ada satu hal lagi yang saya sarankan. Anda dapat menggunakan
xhost
(1) untuk memberikan akses ke pengguna tertentu pada host lokal (mesin Anda) seperti itu,Dalam hal ini, kami menetapkan
root
sebagai nama pengguna, karena itulah akun yangsudo
menjalankan program sebagai.[*] : T: Saya hanya punya satu layar, jadi mengapa tampilan X perlu "alamat"? A: Itu karena X dapat bekerja tidak hanya pada mesin Anda, tetapi melalui internet. Dengan X , mudah menjalankan program di mesin Anda yang muncul di host internet lain dan program di host lain yang muncul di layar Anda (dengan asumsi Anda memberi mereka izin).
sumber
xhost +
untuk memungkinkan akses universal.)XDG_RUNTIME_DIR
adalah variabel lingkungan yang diatur dalam konteks X Windows Anda, sehingga program dapat menemukan sesuatu. Anda (neo
) telah mengatur konteks grafik.Dengan mencoba menjalankan
evince
sepertiroot
, Anda telah memasuki kondisi di mana pengguna (root
) mencoba mengaksesneo
tampilan pengguna lain ( ). Ini dianggap sebagai Hal Buruk.Jika Anda memutuskan Anda HARUS menjalankan editor grafis sebagai
root
, bacaman gksudo
dan manfaatkangksudo
.sumber
journalctl -b -p err | wl-copy
itu melaporkanFailed to connect to a Wayland server
yang masuk akal, tetapi terdengar bodoh dari POV Pengguna.