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.
Bu
—
Martin Ueding
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.
Tamam,
—
Martin Ueding
DISPLAYönü ile bashşimdi çalışıyor gibi görünüyor. Teşekkürler!
Harika! Benim
—
ish
whovardı 0.0, ama yine de. Çalıştığı için DISPLAYparçayı bir cevap olarak ekleyeceğim ; lütfen kabul et. Teşekkürler!
grep -F '(:0)'olmalıgrep -F '(:0.0)'; AyrıcaDISPLAY=:0.0önünde bir yapışma deneyin/usr/bin/think-dock