Я пытаюсь заставить udev отключить клавиатуру ноутбука, когда подключена внешняя клавиатура. До сих пор у меня есть следующий скрипт, который работает, когда я вызываю его напрямую.
#!/bin/bash
export DISPLAY=":0"
export XAUTHORITY="/run/user/1002/gdm/Xauthority"
echo $XAUTHORITY >> /home/apockli/list
echo helloX >> /home/apockli/list
echo `which git` >> /home/apockli/list
echo `/usr/bin/git status` >>/home/apockli/list
echo `/usr/bin/xinput list` >> /home/apockli/list
/usr/bin/xinput float `/usr/bin/xinput list | awk '/Apple/' | sed -r 's/.*id=([0-9]+).*/\1/g'`
echo `/usr/bin/xinput list` >> /home/apockli/list
При запуске, фактически подключающем клавиатуру, файл list содержит следующее:
/run/user/1002/gdm/Xauthority
helloX
/usr/bin/git
*<Some trailing blank lines>*
Я действительно не понимаю, почему работает which git, но /usr/bin/git status не работает, а команды xinput не записываются в файл или фактически не отключают клавиатуру.
Любая помощь будет принята с благодарностью, поскольку я уже слишком долго пытался ее заставить работать.
Спасибо
Да, так должно. Udev запускает команду в другом рабочем каталоге, чем тот, который вы ожидаете. Проверьте это, добавив:
pwd >>/home/apockli/list
Итак, попробуйте изменить домашний каталог:
echo `/usr/bin/git -C /home/apockli/ status` >>/home/apockli/list
Кроме того, у вас должен быть выход из git-репозитория, чтобы увидеть результат, иначе вы получите только пустая строка:
$ git status
fatal: Not a git repository (or any of the parent directories): .git
Что вы видите, это сообщение об ошибке, которое из потока stderr не stdout.
Да, так должно. Udev запускает команду в другом рабочем каталоге, чем тот, который вы ожидаете. Проверьте это, добавив:
pwd >>/home/apockli/list
Итак, попробуйте изменить домашний каталог:
echo `/usr/bin/git -C /home/apockli/ status` >>/home/apockli/list
Кроме того, у вас должен быть выход из git-репозитория, чтобы увидеть результат, иначе вы получите только пустая строка:
$ git status
fatal: Not a git repository (or any of the parent directories): .git
Что вы видите, это сообщение об ошибке, которое из потока stderr не stdout.