Коли я стикую або скасовую док-станцію свого 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
ладу.
Це
—
Мартін Удінг
DISPLAY
здається гарним. Мої who
покази (:0)
хоча. Тому я не думаю, що греп був би кращим таким чином.
Гаразд, з
—
Мартін Удінг
DISPLAY
перед bash
, здається, працює зараз. Дякую!
Чудово! У мене
—
останнє
who
було 0.0
, але все одно. Оскільки це спрацювало, я додам DISPLAY
частину як відповідь; будь ласка, прийміть це. Дякую!
grep -F '(:0)'
повинно бутиgrep -F '(:0.0)'
; Також спробуйте увіткнутиDISPLAY=:0.0
перед/usr/bin/think-dock