Ho la seguente regola che chiama il mio script quando aggancio o disancoraggio del ThinkPad:
# /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"
Questo è lo script che verrà chiamato:
# /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 &
E la sceneggiatura che viene quindi chiamata fa qualcosa con xrandr
.
Il fatto è che posso eseguire think-dock on
come il mio utente ( mu
) e funziona. Posso sudo -i
e corro think-dock-hook on
e funziona anche. Ma quando lo lascio udev
eseguire, viene visualizzato il seguente errore xrandr
:
# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display
Ora se chiamo xrandr
dalla mia sudo -i
shell, ottengo:
No protocol specified
No protocol specified
Can't open display :0
Tuttavia, se lo faccio su -c xrandr mu
dalla mia sudo -i
shell, ottengo l'output previsto.
Quindi non capisco davvero, la sceneggiatura chiamata da udev
fallisce.
DISPLAY
sembra buono. I miei who
display però (:0)
. Quindi non penso che grep sarebbe meglio così.
DISPLAY
davanti bash
, sembra funzionare ora. Grazie!
who
aveva 0.0
, ma comunque. Dal momento che ha funzionato, aggiungerò la DISPLAY
parte come risposta; per favore accettalo. Grazie!
grep -F '(:0)'
dovrebbe esseregrep -F '(:0.0)'
; prova anche ad attaccare unDISPLAY=:0.0
davanti a/usr/bin/think-dock