Запустите сценарий, который отображает окно X из правила udev

Я нашел несколько вопросов на http://unix.stackexchange.com и на http://stackoverflow.com, связанных с запуском скрипта по правилам udev. Но я не могу найти точного решения или определенного ответа на выполнение сценария Bash .

Итак, я задаю (канонический) вопрос: как запустить / запустить / выполнить скрипт Bash с помощью правил udev?

Еще одна вещь, которую я обнаружил при написании правил udev :

udev не запускает эти программы на любом активном терминале и не выполняет их в контексте оболочки. Обязательно убедитесь, что ваша программа отмечена как исполняемый файл, если это сценарий оболочки, убедитесь, что он начинается с соответствующего shebang (например, #! / Bin / sh) и не ожидайте появления стандартного вывода на вашем терминале.

Следовательно, я хочу знать, если возможно, что «Как запустить скрипт bash по правилам udev?»


Вот простой пример выполнения bash-скрипта.

Я написал 99-myrule.rules в /etc/udev/rules.d который содержит:

 ACTION=="add", ATTR{idVendor}=="0781", ATTR{idProduct}=="5567", RUN+="/home/pandya/example.sh" 

Я нашел Vendor & Product ID с выхода lsusb :

 $ lsusb | grep SanDisk Bus 001 Device 066: ID 0781:5567 SanDisk Corp. Cruzer Blade 

И я хочу выполнить экспериментальную команду zenity --info когда мой zenity --info (из SanDisk, указанный выше) прилагается.

поэтому, я написал /home/pandya/example.sh (который вызывается из RUN+= в правилах udev) contians:

 #!/bin/bash zenity --info & exit 

Но этот сценарий не выполняется (несмотря на разрешение на выполнение). Я также пробовал:

  • export DISPLAY=:0 в скрипте перед zenity --info
  • bash -c 'DISPLAY=:0 zenity --info

И, конечно же:

  • sudo restart udev
  • sudo udevadm control --reload-rules

Но я не могу получить выход zenity --info .

Следовательно, как я могу запустить скрипт Bash с помощью правил udev? Предложите мне, если я что-нибудь упустил.

  • Как получить цвет фона Xresources
  • Как скопировать Alt + H в левую клавишу со стрелкой?
  • Можно ли использовать OpenCL на минимальной ОС без X?
  • Почему нет API-интерфейса Unix?
  • Способ преобразования одновременного сочетания клавиш клавиш / букв в другой ключ?
  • Как запустить startx как non-root?
  • Почему моя панель инструментов Emacs отличается от ssh w / X forwarding на Cygwin vs CentOS?
  • Как повернуть окно в X11
  • 3 Solutions collect form web for “Запустите сценарий, который отображает окно X из правила udev”

    Скорее всего, команда выполняется, но не знает, где отображать вывод. Я предполагаю, что вы вошли в систему с X с другим пользователем, кроме root, и это правило, скорее всего, выполняется с правами root. Попробуйте выполнить следующую команду:

     su - your_X_user_here -c 'export DISPLAY=:0;zenity --info' 

    Для запуска любого скрипта Bash выполните команду:

     su - your_X_user_here -c 'export DISPLAY=:0; bash -c "/path/to/script.sh"' 

    Для других, кто читал это, единственный способ, которым я смог заставить свой сценарий работать в Kali Linux 2016, был следующим:

     #!/bin/bash set -x xhost local:root export DISPLAY=:0.0 su root -c 'zenity --notification --text="I am a notification!"' 

    Недавно я нашел элегантный способ отображения GUI или X-задачи из правил udev, не беспокоясь о DISPLAY. Этот принцип будет одинаковым для сценариев Shell с использованием export .

     IMPORT{program}="/usr/bin/xpub", \ RUN+="/bin/su $env{XUSER} -c '/usr/bin/notify-send Hello'" 

    $env{ENV} : если текущий-tty-пользователь запускает X, в противном случае удалите его для root .

    Interesting Posts

    Я отключил Compiz, и строка заголовка в каждом окне отсутствует.

    Каковы преимущества использования именованного канала над неназванным трубой?

    debootstrap: неизвестный пользователь 'root' в файле переопределения состояния

    Недавно установленные проблемы с архитектурой

    Является ли файл / etc / vfstab Solaris конкретным?

    Как отображать TSV (csv) в консоли, когда пустые ячейки пропущены: `column -t -s $ '\ t'`

    Включение вывода процесса в файл tar

    Установка драйвера NVIDIA GeForce 940-mx невозможна

    Монтирование корневого раздела Arch

    не показывать ошибку, если файл не существует в копии, без отправки dev

    Есть ли какие-либо преимущества в построении ядра как 64-битного, хотя пространство пользователя в 32 бит?

    Могу ли я предотвратить «Отключить тачпад при наборе текста» от воздействия на движения мыши?

    Как преобразовать один файл столбца в одну строку?

    создавать пронумерованные файлы с определенным содержимым с помощью bash

    Разрешить определенному пользователю sudo пользователям, входящим в группу X

    Linux и Unix - лучшая ОС в мире.