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

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 .

  • xdotool: как искать окно по названию и классу с разными шаблонами (аналогично AutoHotkey)
  • OpenBSD X, только мышь прокрутки вниз
  • Ввод пунктуации добавляет акцент на предыдущее письмо после того, как мой ноутбук состыкован в течение нескольких минут
  • slim: начать вторую сессию X на tty8
  • Xorg: подключить удаленный дисплей
  • Среднее поведение кнопки мыши в Iceweasel (FireFox): вставить на * текст * курсор
  • Запустить программу OpenGl на удаленном сервере
  • Самая легкая аппаратная ускоренная настольная система
  • Как программно переименовать виртуальный рабочий стол в Cinnamon
  • Xlib без X11? Любая библиотека или система способна это сделать?
  • Ошибка в R: невозможно открыть соединение с X11
  • Как открыть PDF-файл с помощью PuTTY в качестве терминала?
  • Interesting Posts

    Номер команды Bash (история) в PS1

    Как точно находятся файлы под капотом?

    cron midnight 00 24 или 00 00?

    Как загрузить HTML-файл с обфускацией текста

    acpi_listen возвращает другой результат в Ubuntu, чем Arch Linux

    Совместное использование unix-сокетов в непривилегированных lxконтейнерах

    Почему удаление iptables «сломало» мой доступ к сети?

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

    Разница между make-kpkg и make deb-pkg

    Почему команда echo не работает с командой?

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

    Извлечение определенных данных из файла с помощью ключевого слова

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

    Изменение текста на одном номере строки в нескольких текстовых файлах

    Зарегистрировать всю корневую активность с оригинальным именем пользователя, которое su'd / sudoed для root

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