Запустите сценарий, который отображает окно 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? Предложите мне, если я что-нибудь упустил.

  • Как я могу получить более красивые шрифты в моем терминале (URxvt)?
  • Безопасно ли запускать инструменты GPG в x11?
  • ssh с -Y приводит к «shell-init: ошибка получения текущего каталога: getcwd: невозможно получить доступ к родительским каталогам ...»
  • gnuplot не может увеличить Mac Sierra
  • минимальный оконный менеджер для обеспечения визуального chroot и выхода из приложения
  • Запуск моно на CentOS 5 CLI
  • Как проверить ненадежное графическое приложение?
  • AIX 6.1, начиная xhost + из inittab во время загрузки
  • 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 .

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