Я пытаюсь заставить 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 status
fatal: Not a git repository (or any of the parent directories): .git
То, что Вы видите, является сообщением об ошибке, которое является от stderr
поток нет stdout
.