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"
それが呼び出されるスクリプトです:
# /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 &
そして、次に呼び出されるスクリプトは、で何かを行いxrandrます。
問題はthink-dock on、ユーザー(mu)として実行できることです。私はsudo -i走ることができ、think-dock-hook onそれもうまくいきます。しかし、私udevがそれを実行させると、次のエラーが発生しxrandrます:
# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display
シェルxrandrから呼び出すとsudo -i、次のようになります。
No protocol specified
No protocol specified
Can't open display :0
ただし、シェルsu -c xrandr muから実行sudo -iすると、期待どおりの出力が得られます。
だから私は本当に理解していません、から呼び出されたスクリプトはudev失敗します。
                  それは
                
                  
                    —
                    Martin Ueding、2012 
                    
                  
                
              DISPLAY良いようです。私のwhoディスプレイ(:0)も。したがって、grepがそのように優れているとは思いません。
                
                  さて、の
                
                  
                    —
                    Martin Ueding、2012 
                    
                  
                
              DISPLAY前でbash、今は動作しているようです。ありがとう!
                
                  すごい!私
                
                  
                    —
                    ish 
                    
                  
                
              whoは持っていましたが0.0、とにかく。うまくいったので、そのDISPLAY部分を答えとして追加します。受け入れてください。ありがとう!
                
grep -F '(:0)'する必要がありgrep -F '(:0.0)'ます。のDISPLAY=:0.0前にも貼り付けてみてください/usr/bin/think-dock