XDG_RUNTIME_DIR nedir?


14

Evince'yi Komut satırından açmaya çalışırken bana bir hata veriyor

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:

Bu sorun nasıl giderilir?


1
Bize işletim sisteminiz hakkında daha fazla bilgi verin.
DK Bose

Yanıtlar:


31

İlk önce: XDG_RUNTIME_DIR

İlk sorunuza "XDG_RUNTIME_DIR nedir?" , oturum açtığınızda otomatik olarak ayarlanan bir ortam değişkenidir. Çalıştırdığınız herhangi bir programa, küçük geçici dosyaları depolayabileceği kullanıcıya özel bir dizin nerede bulacağını bildirir. Bunun (8)XDG_RUNTIME_DIR tarafından ayarlandığını unutmayın , bu nedenle aslında X ile (programların grafik olarak çalıştırılması) ilgili değildir , ki bu problem gibi görünmektedir.pam_systemd

Sorun giderme

İkinci sorunuz "Bu sorun nasıl giderilir?" çok iyi. Bu, yalnızca düzeltmenin ne olduğu ile değil, aynı zamanda kendi başınıza nasıl çözeceğinizle de ilgileneceğiniz anlamına gelir . Başlamak için önce ilk hata mesajlarına bakın. Özellikle, No protocol specifiedveya için arama yapmak WARNING **: Could not open X display, sorunun grafik programlarınızda nasıl gösterildiğini gösteren X ( The X Windowing System olarak da bilinir) ile ilgili olduğunu göstermelidir . Bunun bilinmesi, aklınızdaki birçok sorun giderme sorusunu gündeme getirmelidir.

X EKRAN

Bir sonraki sorunuz, açığa çıkamayan "X ekran" nedir? "Görüntü" ekranınızın adresidir. [*] Ekranınıza yazmak isteyen herhangi bir programın adresini bilmesi gerekir. DISPLAY ortam değişkenini kontrol ederek X ekranınızın ne olduğunu görebilirsiniz:

echo $DISPLAY

sudoDISPLAY'inizin ne düşündüğünü yazarak şunları kontrol edebilirsiniz :

sudo -s
echo $DISPLAY
exit

Hiçbir şey göstermiyorsa, sorun budur. (Aşağıdaki düzeltmeye bakın).

XAUTHORITY

Ancak, sorun bu değilse ve DISPLAYdoğru bir şekilde ayarlanmışsa ne olur sudo? O zaman merak edebilirsiniz, X'in diğer kullanıcıların ekranımda yazmasını engelleyen bir çeşit izni var mı? Bunun doğru olacağını düşündüyseniz, X'in iki ana yetkilendirme yöntemi vardır: xauthve xhost. Bugün en yaygın kullanılanı , ortam değişkenini kullanan xauth(1) ' dir XAUTHORITY. Yine, doğru şekilde ayarlanıp ayarlanmadığını kontrol edelim sudo:

echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit

Eğer XAUTHORITYsizin için ev dizininde bir dosyaya işaret, ancak çalıştırmak 's boş sudo, o zaman sorun olduğunu.

Düzeltme: Ortam değişkenlerini kaydedin

Peki, düzeltme nedir? Ya DISPLAYda XAUTHORITYortam değişkenleri arasında kaydedilmiyorsa sudo, sudo(8)-E seçeneğini aşağıdaki gibi seçeneği kullanarak çevreyi korumasını söyleyebilirsiniz :

sudo -E evince

Daha iyi bir yol: env_keep

Bekleyebilirsiniz, bekle, eğer -Eher şeyi sihirli bir şekilde yaparsa , neden varsayılan değil sudo? Cevap, potansiyel bir güvenlik tehlikesi olmasıdır. Ortam değişkenleri programların çalışma şeklini etkiler ve bunların hepsinin bir kullanıcı hesabından köke aktarılmasını istemezsiniz. Bunu yapmak için "doğru" yolu hattını eklemektir Defaults env_keep += "DISPLAY XAUTHORITY"için sudoers(5) kullanarak dosyanın visudo(8) . Sudo'nun hangi ortam değişkenlerini koruduğunu şu komutla kontrol edebilirsiniz:

sudo sudo -V

(Evet, sudoiki kez yazıyorsunuz ). Satırı varsayılan sudoers dosyasına ( /etc/sudoers) değil, sisteminizi yükselttiğinizde üzerine yazılmayacak yerel bir dosyaya koymanızı öneririm . Bunu şöyle yapabilirsiniz:

sudo visudo -f /etc/sudoers.d/local 

Ama bekleyin, ya yukarıdakilerin hiçbiri işe yaramazsa?

Bence bu oldukça kapsamlı bir cevap, ama hala sorun yaşıyorsanız, önerebileceğim başka bir şey daha var. Yerel ana makinede (makinenizde) belirli bir kullanıcıya bu şekilde erişim vermek için xhost(1) kullanabilirsiniz ,

xhost si:localuser:root

Bu durumda, rootkullanıcı adı olarak belirtiyoruz, çünkü sudoprogramları şu şekilde çalıştıran hesap budur .


[*] : S: Yalnızca bir ekranım var, neden X ekranın "adres" e ihtiyacı var? C: Çünkü X sadece makinenizde değil, internet üzerinden de çalışabilir. İle X , ekranınızda görünen diğer konaklarda diğer internet host ve programlar da gösterilen makinede programları çalıştırmak için kolaydır (onları izni vermek varsayarak).


Ayrıntılı cevap için teşekkür ederim. Eminim cevabınızda her kullanıcı için en azından yeni bir şey vardır. (Benim için: X'e belirli bir kullanıcıya nasıl erişim verilir, bu da xhost +evrensel erişime izin vermekten daha iyidir .)
drumfire

3

XDG_RUNTIME_DIRX Windows bağlamınızda ayarlanan bir ortam değişkenidir, böylece programlar bir şeyler bulabilir. Sen ( neo) grafik bağlamı kurdunuz.

evinceAs komutunu çalıştırmayı denediğinizde root, bir kullanıcının ( root) başka bir kullanıcının ( neo) ekranına erişmeye çalıştığı koşulu girdiniz . Bu Kötü Bir Şey olarak kabul edilir.

Grafik düzenleyici olarak çalıştırmanız gerektiğine karar verirseniz root, okuyun man gksudo ve kullanın gksudo.


ilginç yorum. Peki böyle bir şeye nasıl yapabileceğimi biliyor musun? hangi mantıklı journalctl -b -p err | wl-copyolduğunu bildirir Failed to connect to a Wayland server, ancak Kullanıcı POV gelen aptalca geliyor.
mh-cbon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.