root olarak xrandr ekranları bulamıyor


9

ThinkPad'i taktığımda veya çıkardığımda şu kuralı çağırıyorum:

# /lib/udev/rules.d/81-thinkpad-dock.rules
KERNEL=="dock.0", ATTR{docked}=="0", RUN+="/usr/bin/think-dock-hook off"
KERNEL=="dock.0", ATTR{docked}=="1", RUN+="/usr/bin/think-dock-hook on"

Bu çağrılacak komut dosyasıdır:

# /usr/bin/think-dock-hook
# Find the user who is currently logged in on the primary screen.
user="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
su -c "bash -x /usr/bin/think-dock $setto" "$user" >> /root/think-dock.log 2>&1 &

Ve sonra çağrılan komut dosyası ile bir şey yapar xrandr.

Şey think-dock onbenim kullanıcı ( mu) olarak çalışabilir ve çalışır. Çalışabilirim sudo -ive koşuyorum think-dock-hook onve o da işe yarıyor. Ama udevçalıştırmasına izin verdiğimde , sadece aşağıdaki hatayı alırsınız xrandr:

# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display

Şimdi çağırırsanız xrandrbenim dan sudo -ikabuk, alıyorum:

No protocol specified
No protocol specified
Can't open display :0

Yaparsam Ancak, su -c xrandr mubenim gelen sudo -ikabuk, beklediğimden çıktı alabilirsiniz.

Bu yüzden gerçekten anlamıyorum, denilen senaryo udevbaşarısız oluyor.


1
grep -F '(:0)'olmalı grep -F '(:0.0)'; Ayrıca DISPLAY=:0.0önünde bir yapışma deneyin/usr/bin/think-dock
ish

Bu DISPLAYiyi görünüyor. Benim whogörüntüler (:0)rağmen. Bu yüzden grep'in bu şekilde daha iyi olacağını düşünmüyorum.
Martin Ueding

Tamam, DISPLAYönü ile bashşimdi çalışıyor gibi görünüyor. Teşekkürler!
Martin Ueding

Harika! Benim whovardı 0.0, ama yine de. Çalıştığı için DISPLAYparçayı bir cevap olarak ekleyeceğim ; lütfen kabul et. Teşekkürler!
ish

Yanıtlar:


7
  • xrandr'ın hangi ekran hakkında konuştuğunuzu bilmesi gerekir, genellikle DISPLAYortam değişkeni üzerinden
  • root(hangi udev olarak çalışır) varsayılan DISPLAYayar yoktur ; yapsa bile su -c, çevreyi varsayılan olarak korumaz
  • Bu yüzden açıkça bash'a iletin ve bu sorununuzu çözmelidir, örneğin:

    su -c "DISPLAY=:0.0 bash -x /usr/bin/think-dock $setto" "$user"
    
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.