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 on
benim kullanıcı ( mu
) olarak çalışabilir ve çalışır. Çalışabilirim sudo -i
ve koşuyorum think-dock-hook on
ve 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 xrandr
benim dan sudo -i
kabuk, alıyorum:
No protocol specified
No protocol specified
Can't open display :0
Yaparsam Ancak, su -c xrandr mu
benim gelen sudo -i
kabuk, beklediğimden çıktı alabilirsiniz.
Bu yüzden gerçekten anlamıyorum, denilen senaryo udev
başarısız oluyor.
Bu
—
Martin Ueding
DISPLAY
iyi görünüyor. Benim who
gö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
who
vardı 0.0
, ama yine de. Çalıştığı için DISPLAY
parç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