Запустить скрипт при подключении телефона через usb

Попытка запустить скрипт, когда мой телефон подключен через USB. Я создал правило udev в /etc/udev/rules.d/85-lazydroid.rule, которое выглядит следующим образом:

ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="428c", RUN+="/home/joel/.lazydroid"

А скрипт .lazydroid выглядит так:

#!/bin/bash
exec adb forward tcp:8080 tcp:8080 &
exec chromium-browser 127.0.0.1:8080 --new-window &

Сам скрипт работает нормально, но дело в том, что я не могу запустить скрипт при вставке телефона.

Он имеет правильный идентификатор в соответствии с lsusb | grep Motorola

Bus 002 Device 042: ID 22b8:428c Motorola PCS

Есть идеи?

[EDIT] Хорошо, теперь я знаю, что правило udev работает, так как оно создает символическую ссылку. Я внес некоторые изменения в правило, см. Ниже:

SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="428c", SYMLINK+="phone", RUN+="/bin/sh /home/joel/.lazydroid.sh"

Но скрипт все равно не запустится. И если я запускаю его отдельно, он все равно работает отлично.

5
задан 13 September 2015 в 02:43

3 ответа

Вы можете проверить, будет ли выполнено ваше правило, запустив

udevadm test /path/to/sysfs/dev

. Вы можете найти узел sysfs для устройств, используя это:

udevadm info -q path -n /dev/sda  #To find sysfs node for first HDD

. вместе это будет:

udevadm test $(udevadm info -q path -n /dev/sda) 2>&1 | more

Grep, что для имени вашего скрипта или читать его построчно, если хотите. Если ваш скрипт вызывается, но не выполняется, помните, что в сценарии udev нет типичной среды, поэтому вы должны вызывать все программы по их полному пути или иным образом воссоздавать среду по своему вкусу. Попробуйте заменить adb и chromium-browser их абсолютными путями (which adb и which chromium-browser)

Также второй exec в вашем bash-скрипте не будет выполняться так, как вы ожидаете, так как среда не определяет оконная система для запуска Chromium. Мне кажется, я понимаю, что вы пытались сделать здесь, но udev разработан так, чтобы быть неинтерактивным.

В ответ на ваш комментарий. В каждой системе Unix есть несколько абстрактных экранов, называемых дисплеями. X11, который является оконным менеджером (например, explorer.exe, для Ubuntu), занимает одну из них (я думаю, я работаю через ssh в основном 7 или 8). Когда вы запускаете графическую программу из командной строки (скажем, gedit), она проверяет переменную среды DISPLAY, чтобы определить, на каком экране она будет отображаться.

Это нечто большее, и я никогда не получал четкого понимания того, что там происходит с «другими вещами», но я постараюсь сделать несколько диагностических вещей из вашего сценария. :

mkdir /tmp/udev-script
/usr/bin/printenv > /tmp/udev-script/environment.log
/bin/echo "My script was run!" > /tmp/udev-script/script.log
DISPLAY=:8      # or :7, play around with that
export DISPLAY  # Promote shell variable to environment variable
exec /path/to/chromium 2> /tmp/udev-script/chromium.log 1>&2 &
exit            # This is important for udev, see sources

source1 (udev)
source2 (man udevadm)
source3 (EXEC)
source4 (DISPLAY)

0
ответ дан 13 September 2015 в 02:43

Я думаю, что вы на правильном пути.

Возможно, вы захотите разделить это на два скрипта -

Использовать базовый скрипт в udev, который запускает другой скрипт и завершает работу; выход важен, потому что в противном случае правило udev будет ждать завершения скриптов один и два перед монтированием.

Ваш .lazydroid должен быть

#!bin/bash
/home/joel/auto_mount.sh & exit

. Предоставьте ему права на выполнение:

chmod +x .lazydroid

Тогда /home/joel/auto_mount.sh должно быть содержимым вашего исходного файла .lazydroid.

Добавьте sleep 5, чтобы подождать 5 секунд перед запуском остальной части вашего сценария.

Снова предоставьте ему права на исполнение:

chmod +x auto_mount.sh

Полный кредит

0
ответ дан 13 September 2015 в 02:43

Я думаю, что проблема в том, как вы указали RUN. Вы должны написать RUN+="/bin/bash /home/joel/.lazydroid.sh" Также сначала попробуйте запустить простой скрипт, такой как скопировать существующий файл в другое место.

Надеюсь, это поможет;)

0
ответ дан 13 September 2015 в 02:43

Другие вопросы по тегам:

Похожие вопросы: