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

  • Пересылка X11 не работает от шпатлевки и XMing до centos 6.4
  • Как настроить клавиши numpad с помощью XKB?
  • Как я могу снова получить X для автоматического определения характеристик монитора?
  • размер ограничивающей рамки для шрифта TrueType
  • Как подключить клавиатуру и мышь к другому экрану?
  • Как я могу настроить новые файлы ~ / .vnc / xtartup для обычного рабочего стола по умолчанию?
  • Ключи модификатора в последовательности компоновки
  • Включение постоянной пересылки 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

    Что такое «ядерная динамическая память», как сообщает smem?

    Отсутствие Ubuntu в меню загрузки после установки Cent OS 6

    Как я могу написать во вторую строку файла из командной строки?

    как перечислить все диапазоны IP в Интернете?

    обрезать и вытеснять видео и аудио с помощью avconv (или другого инструмента)

    Как добавить MATLAB в PATH?

    Как grep для одной строки, но несколько файлов одновременно?

    Использование sudoedit в скрипте (не интерактивно)

    Как подключиться к Wi-Fi из командной строки?

    Reverse (SSH) через сервер между двумя компьютерами? – для удаленной помощи

    Как добавить условие в цикл for во время подстановки, если строка равна нулю

    Изменение конца строки всякий раз, когда она содержит определенную строку

    Правило udev соответствует значку раздела

    Что является хорошим примером сценария bash для изучения, чтобы изучить хорошие правила кодирования?

    Почему это «while kill -0 $ PID», а не «до kill -0 $ PID»?

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