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 oleh pam_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
atau WARNING **: 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:
echo $DISPLAY
Dan Anda dapat memeriksa apa yang sudo
menurut DISPLAY Anda dengan mengetik:
sudo -s
echo $DISPLAY
exit
Jika tidak menunjukkan apa-apa, maka itu masalahnya. (Lihat perbaikan di bawah).
XAUTHORITY
Tapi, bagaimana jika itu bukan masalah dan DISPLAY
diatur dengan benar sudo
? 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
dan xhost
. Yang paling umum digunakan saat ini adalah xauth
(1) yang menggunakan XAUTHORITY
variabel lingkungan. Sekali lagi, mari kita periksa apakah sudah diatur dengan benar sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Jika XAUTHORITY
menunjuk ke sebuah file di direktori home Anda untuk Anda, tetapi itu kosong ketika Anda menjalankan sudo
, maka itulah masalahnya.
FIX: Simpan Variabel Lingkungan
Jadi, apa masalahnya? Jika variabel lingkungan DISPLAY
atau XAUTHORITY
tidak diselamatkan di seluruh sudo
, Anda dapat memberitahu sudo
(8) untuk melestarikan lingkungan dengan menggunakan -E
opsi, seperti:
sudo -E evince
Cara yang lebih baik: env_keep
Anda mungkin bertanya, Tunggu, jika -E
membuat semuanya berfungsi secara ajaib, lalu mengapa itu bukan default untuk sudo
? 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 baris Defaults env_keep += "DISPLAY XAUTHORITY"
ke file sudoers
(5) menggunakan visudo
(8) . Anda dapat memeriksa variabel lingkungan yang dipertahankan oleh sudo dengan menjalankan:
sudo sudo -V
(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:
sudo visudo -f /etc/sudoers.d/local
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,
xhost si:localuser:root
Dalam hal ini, kami menetapkan root
sebagai nama pengguna, karena itulah akun yang sudo
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).