Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как заставить udev запускать графические программы?  (Прочитано 537 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Есть правило в udev (/etc/udev/rules.d) которое при подключении устройства запускает скрипт,
но в нем не запускаются графические программы. Да, я знаю что так и должно быть,
но должен же быть какой-то способ обойти это ограничение?
Гуглил ен и рунет и перепробывал: добавлял DISPLAY=:0, писал полные пути к испол. файлам,
менял строку запуска в правиле на /usr/bin/sh, /usr/bin/bash с разными параметрами, и
/usr/bin/sudo. и еще много чего... но граф. проги не стартуют.
В скрипте для теста использую zenity:
Код: Bash
  1. #!/bin/bash
  2.  
  3. DISPLAY=:0 /usr/bin/zenity --info --width=200 --text="Test msg"
  4.  
Есть ли вообще решение?

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 1801
    • Просмотр профиля
Я этого не делал, поэтому советов давать не ммогу, но вот когда при разрешённом
автомонтировании вставляется флешка, то запускается именно графический
файл-менеджер, так что должно быть возможно. Посмотрите udev-правило для
usb-flash и xml-файл у себя, в котором включается автомонтирование.
Пётр.

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Цитировать
когда при разрешённом автомонтировании вставляется флешка, то запускается именно графический
файл-менеджер
У меня lubuntu, и не флешка а модем, и при разрешённом автомонтировании флешек файл-менеджер не запускается.
Вот вывод поиска RUN в /lib/udev/rules.d
grep -r RUN /lib/udev/rules.d:
(Нажмите, чтобы показать/скрыть)

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 1801
    • Просмотр профиля
А сам скрипт ведь запускается? Тогда перенаправьте его вывод в файл
и смотрите, на что жалуется.
Пётр.

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Сделал, все запускается и работет:

Правило udev:
KERNEL=="ttyUSB0", SUBSYSTEM=="tty", ACTION=="add", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", RUN+="/путь/до/Pre_Start.sh"
Значения ATTRS{idVendor}=="XXXX" и ATTRS{idProduct}=="XXXX"
смотреть в выводеudevadm monitor --environment --udevпосле подключения модема, или из lsusb.

Pre_Start.sh
Код: Bash
  1. #!/bin/bash
  2.  
  3. /usr/bin/script -f -c "/bin/bash /путь/до/Start.sh" "/путь/до/лога.LOG" & exit 0
  4.  
Без Pre_Start.sh - скрипт запускается но модем не определяется.
Не понял почему, но модем определяется только с запуском через script,
менял на /bin/bash "/путь/до/Start.sh" & exit 0 - не определялся.

Start.sh
Код: Bash
  1. #!/bin/bash
  2.  
  3. # Путь до скрипта использующего граф. программы и
  4. # который запустится от юзера при подключении модема
  5. SCRIPT="/путь/до/скрипта.sh"
  6.  
  7. # Значение PATH из "echo $PATH"
  8. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
  9.  
  10. LocalDisplay=':0'
  11. export DISPLAY=$LocalDisplay
  12.  
  13. X11User=$(who | grep " :0" | cut -f1 -d ' ')
  14. [ "$X11User" ] || exit
  15.  
  16. [ -e /home/$X11User/.bashrc ] && source /home/$X11User/.bashrc
  17.  
  18. su $X11User -c "/bin/bash "$SCRIPT" & exit 0"
  19.  
Все пути указывать полные т.к. запускается все от рута, и с не нормальным окружением.

В скрипте указанном в переменной SCRIPT в начале нужно прописать задержку (sleep N) для
ожидания инициализации модема которую можно найти таким скриптом (прописав путь в SCRIPT):

Код: Bash
  1. #!/bin/bash
  2.  
  3. START_TIME=$(date +"%s")
  4.  
  5. while sleep 1; do
  6. [ "$(nmcli -t -f state dev status)" ] && break
  7. done
  8.  
  9. END_TIME=$(date +"%s")
  10.  
  11. let INIT_DELAY=END_TIME-START_TIME
  12.  
  13. zenity --info --text "Задержка (сек.) = $INIT_DELAY"

Для надежности прибавить к результату 2-3 сек.

Мой скрипт (для Теле2) который показывает при подключении модема баланс, остаток трафика, все смс, +удаление всех смс:
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 04 Январь 2016, 13:41:01 от Cxms »

 

Страница сгенерирована за 0.099 секунд. Запросов: 24.