Intereting Posts

Udev: запуск shellscript, который обращается к X-дисплею

После того, как мой 3G-модем работал в Arch Linux я хотел устранить некоторые ручные работы, необходимые в этом процессе. Поэтому мне нужно было создать правило udev. После некоторых проб и ошибок я придумал следующее правило с именем 11-my-rule.rules которое я разместил в /etc/udev/rules.d/ :

 # start at sdb to ignore the system hard drive KERNEL!="sd[bz]*", GOTO="my_media_automount_end" # run the script and create a testdir to verify the rule works ACTION=="add", RUN+="/myscript.sh", RUN+="/bin/mkdir -p '/media/pendrive'" #remove the testfolder on removal of usb ACTION=="remove", RUN+="/bin/rm -R '/media/pendrive'" # exit LABEL="my_media_automount_end" 

Мой тестовый сценарий, который должен быть запущен, выглядит следующим образом:

 #!/bin/bash DISPLAY=:0 xterm 

Что отображает xterminal. Я тестировал сам скрипт, и он работает. Также работает второй RUN +, который создает тестовую директорию. Поэтому я в недоумении, что я делаю неправильно.

@EightBitTony может быть прав. Правила udev выполняются как пользователь root. Таким образом, помимо указания DISPLAY , вы должны предоставить этому пользователю root доступ к вашей X-сессии.

Этого можно добиться, найдя соответствующий файл полномочий и экспортируя его как XAUTHORITY . echo $XAUTHORITY от эмулятора терминала может сказать вам, где он находится.

Использование диспетчера дисплеев, местоположение, вероятно, изменится при каждом входе в систему. Кроме того, вы можете вызывать xhost + из вашего сеанса x, предоставляя всем другим пользователям доступ к этому сеансу. xhost - закроет это снова. Напоминаем, что это также позволяет удаленным пользователям получать доступ к сеансу с использованием TCP-порта.