Tôi có quy tắc sau gọi kịch bản của mình khi tôi neo hoặc hủy gắn ThinkPad của mình:
# /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"
Đó là kịch bản sẽ được gọi là:
# /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 &
Và kịch bản sau đó được gọi là làm một cái gì đó với xrandr
.
Điều này là tôi có thể chạy think-dock on
như người dùng của tôi ( mu
) và nó hoạt động. Tôi có thể sudo -i
và chạy think-dock-hook on
và nó hoạt động quá. Nhưng khi tôi udev
chạy nó, nó sẽ nhận được lỗi sau xrandr
:
# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display
Bây giờ nếu tôi gọi xrandr
từ sudo -i
vỏ của mình , tôi nhận được:
No protocol specified
No protocol specified
Can't open display :0
Tuy nhiên, nếu tôi làm su -c xrandr mu
từ sudo -i
vỏ của mình , tôi sẽ nhận được đầu ra mong đợi.
Vì vậy, tôi không thực sự hiểu, kịch bản được gọi từ udev
thất bại.
Điều đó
—
Martin Uting
DISPLAY
có vẻ tốt. who
Màn hình của tôi (:0)
mặc dù. Vì vậy, tôi không nghĩ rằng grep sẽ tốt hơn theo cách đó.
Được rồi, với
—
Martin Uting
DISPLAY
phía trước bash
, nó dường như làm việc bây giờ. Cảm ơn!
Tuyệt quá! Của tôi
—
ish
who
đã có 0.0
, nhưng dù sao. Vì nó hoạt động, tôi sẽ thêm DISPLAY
phần dưới dạng câu trả lời; làm ơn chấp nhận nó. Cảm ơn!
grep -F '(:0)'
nên đượcgrep -F '(:0.0)'
; cũng thử dán một cáiDISPLAY=:0.0
trước mặt/usr/bin/think-dock