Podczas zadokowania lub oddokowania komputera ThinkPad mam następującą regułę: wywołaj mój skrypt:
# /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"
Oto skrypt, który zostanie nazwany:
# /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 &
A następnie wywoływany skrypt coś z tym robi xrandr.
Chodzi o to, że mogę działać think-dock onjako mój użytkownik ( mu) i działa. Mogę sudo -ii biegam, think-dock-hook ona to też działa. Ale kiedy pozwalam udevgo uruchomić, pojawia się następujący błąd xrandr:
# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display
Teraz, gdy zadzwonię xrandrz mojej sudo -ipowłoki, otrzymam:
No protocol specified
No protocol specified
Can't open display :0
Jednak jeśli zrobię to su -c xrandr muz mojej sudo -ipowłoki, otrzymam oczekiwany wynik.
Więc tak naprawdę nie rozumiem, skrypt wywoływany z udevnie działa.
DISPLAYwydaje się dobre. Chociaż moje whowyświetlacze (:0). Więc nie sądzę, że grep byłby lepszy w ten sposób.
DISPLAYprzodu bashwydaje się, że teraz działa. Dzięki!
whomiał 0.0, ale i tak. Ponieważ zadziałało, dodam tę DISPLAYczęść jako odpowiedź; proszę zaakceptuj to. Dzięki!
grep -F '(:0)'powinno byćgrep -F '(:0.0)'; także spróbować rzeźnickiegoDISPLAY=:0.0z przodu/usr/bin/think-dock