Скрипт, запущенный udev, управляет сбоями

Я запускаю Ubuntu 18.4, и я получил проблему со сценарием, который отказывается работать при инициировании правилом udev.

Это - ситуация: Я работаю на Surface Pro 4. Это Устройство имеет съемную клавиатуру. Я запускаю программное обеспечение, названное libinput-жестами. Каждый раз, когда клавиатура отсоединена и повторно прикреплена, жесты не будут работать. Довольно легко зафиксировать вручную с:

libinput-gestures-setup restart

Таким образом, скрипт, который я пытаюсь запустить, делает точно это. Вот это в его полной славе:

#!/bin/sh

libinput-gestures-setup restart

Я хочу работать на нем добавить событие правила udev. Вот .rules файл:

ACTION=="add", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="07e8", RUN+="/home/$myuser/.bin/gestures-restart"

и нахождение сценария после присоединения клавиатуры хорошо работает. Но это - то, что зарегистрировано:

Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.005043] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.005047] usb 1-7: Product: Surface Type Cover
Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.005050] usb 1-7: Manufacturer: Microsoft
Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.013813] input: Microsoft Surface Type Cover Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:045E:07E8.000D/input/input95
Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.072209] input: Microsoft Surface Type Cover Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:045E:07E8.000D/input/input97
Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.072444] input: Microsoft Surface Type Cover Touchpad as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:045E:07E8.000D/input/input99
Apr 20 22:20:51 mb-Surface-Pro-4 kernel: [ 2248.072881] hid-multitouch 0003:045E:07E8.000D: input,hiddev1,hidraw2: USB HID v1.11 Keyboard [Microsoft Surface Type Cover] on usb-0000:00:14.0-7/input0
Apr 20 22:20:51 mb-Surface-Pro-4 mtp-probe: checking bus 1, device 11: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7"
Apr 20 22:20:51 mb-Surface-Pro-4 mtp-probe: bus: 1, device: 11 was not an MTP device
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5965]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5965]: message repeated 2 times: [ Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.]
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5982]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5993]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5965]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5992]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5991]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5982]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[6011]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5965]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5992]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5993]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[5991]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 systemd-udevd[6015]: Process '/home/mariusb/.bin/gestures-restart' failed with exit code 1.
Apr 20 22:20:51 mb-Surface-Pro-4 upowerd[868]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:045E:07E8.000D
Apr 20 22:20:51 mb-Surface-Pro-4 upowerd[868]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0
Apr 20 22:20:51 mb-Surface-Pro-4 upowerd[868]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7

Таким образом, по-видимому сценарий является проблемой здесь. И это - то, где я нуждаюсь в помощи, потому что я не понимаю что случилось.

Как дополнительная информация: Когда я установил libinput, я должен был добавить своего пользователя к группе libinput. Возможно, это имеет некоторое отношение к этому

Так или иначе, много заранее спасибо

Править: Это, кажется, имеет некоторое отношение к сценарию, не выполняемому пользователем. journalctl - ксенон печатает следующее:

-- Unit gestures-restart.service has begun starting up.
Apr 20 23:05:44 mb-Surface-Pro-4 gestures-restart[3550]: Non-installation commands must be run as your own user.
Apr 20 23:05:44 mb-Surface-Pro-4 systemd[1]: gestures-restart.service: Main process exited, code=exited, status=1/FAILURE
Apr 20 23:05:44 mb-Surface-Pro-4 systemd[1]: gestures-restart.service: Failed with result 'exit-code'.
Apr 20 23:05:44 mb-Surface-Pro-4 systemd[1]: Failed to start Restart gestures.
-- Subject: Unit gestures-restart.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit gestures-restart.service has failed.
-- 
-- The result is RESULT.

кто-либо теперь, как зафиксировать это?


Редактирование/Обновление 2:


Я получил сервис, обнаруживающий соединение моей клавиатуры. Это хорошо работает и выполняет сценарий перезапуска, как требуется. Таким образом усовершенствовать его: это - мой сервис прямо сейчас:

[Unit]
Description=Service for restarting gestures
Requires=dev-input-by\x2dpath-pci\x2d0000:00:14.0\x2dusb\x2d0:7:1.0\x2devent\x2dmouse.device
After=dev-input-by\x2dpath-pci\x2d0000:00:14.0\x2dusb\x2d0:7:1.0\x2devent\x2dmouse.device

[Service]
Type=simple
User=$user
ExecStart=/home/$user/.bin/gestures-restart.sh

[Install]
WantedBy=dev-input-by\x2dpath-pci\x2d0000:00:14.0\x2dusb\x2d0:7:1.0\x2devent\x2dmouse.device

libinput-жесты-l предоставляют некоторую информацию о приложении, одном из них быть:

libinput-gestures: device /dev/input/by-path/pci-0000:00:14.0-usb-0:7:1.0-event-mouse(event6): Microsoft Surface Type Cover Touchpad

Так насколько я понимаю это - устройство использование программного обеспечения в качестве входа. Таким образом, я использовал systemctl list-units и найденный этим устройством:

sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d7-1\x2d7:1.0-0003:045E:07E8.0004-input-input29-event6.device

(Я определил его event6 свойством), и использовал его для сервисов, ТРЕБУЮТ/ПОСЛЕ ТОГО, КАК...

Это все взгляды, хорошие до сих пор. Когда я отсоединяю и повторно прикрепляю клавиатуру journalctl - ксенон производит следующее:

Apr 21 15:22:13 mb-Surface-Pro-4 systemd[1]: Found device Surface_Type_Cover.
-- Subject: Unit dev-input-by\x2dpath-pci\x2d0000:00:14.0\x2dusb\x2d0:7:1.0\x2devent\x2dmouse.device has finished start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit dev-input-by\x2dpath-pci\x2d0000:00:14.0\x2dusb\x2d0:7:1.0\x2devent\x2dmouse.device has finished starting up.
-- 
-- The start-up result is RESULT.
Apr 21 15:22:13 mb-Surface-Pro-4 upowerd[886]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:045E:07E8.0011
Apr 21 15:22:13 mb-Surface-Pro-4 systemd[1]: Started Service for restarting gestures.
-- Subject: Unit gestures-restart.service has finished start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit gestures-restart.service has finished starting up.
-- 
-- The start-up result is RESULT.
Apr 21 15:22:13 mb-Surface-Pro-4 upowerd[886]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0
Apr 21 15:22:13 mb-Surface-Pro-4 upowerd[886]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-7
Apr 21 15:22:13 mb-Surface-Pro-4 gestures-restart.sh[5532]: libinput-debug-events stopped.
Apr 21 15:22:13 mb-Surface-Pro-4 gestures-restart.sh[5532]: libinput-gestures stopped.

Как показано сервис распознает соединение и запускает sctipt. scrpt затем выполняет свою функциональность ОСТАНОВКИ, но он не запускает снова. Я знаю, что это могло бы выйти за рамки этой Проблемы, но Вы видите очевидные основания для этого? Спасибо :)

Последнее обновление

Я связался с разработчиком утилиты. По всей вероятности действие запуска перестало работать, потому что приложение должно быть запущено на фактическом сеансе пользователя. Не системной службой. Спасибо за внимание.

1
задан 22 April 2020 в 10:26

2 ответа

Поэтому с некоторой задержкой здесь предлагается, как решить проблему такого рода.

Прежде всего, вы должны прочитать всю эту ветку с ее комментариями, поскольку они дают представление о том, как настроить

Было обнаружено правильное сообщение D-Bus, и скрипт запустился соответствующим образом. Но осталась проблема с libinput-жестами, так как он смог остановиться, но не запуститься снова! Проблема в том, что скрипт запускает операцию перезагрузки как system. Но для запуска libinput-gestures требуется сеанс пользователя, поэтому скрипт должен запускаться пользователем.

Для этого создатель libinput создал отдельный инструмент. dbus-action. Я не смог протестировать это приложение, так как моя ОС не соответствовала требуемой среде. Но я надеюсь, что вы сможете использовать его :)

0
ответ дан 28 August 2020 в 07:59

Метод 1:

$ cat 99-logitech-custom.rules
# Start autorun systemd .service
ACTION=="add", \
SUBSYSTEMS=="input", \
ATTR{name}=="Logitech Performance MX", \
TAG+="systemd", ENV{SYSTEMD_USER_WANTS}="logitech_custom.service"

Использовать udevadm control --reload && udevadm trigger перезагружать udev.

... и простой oneshot systemd .service

$ cat ~/.config/systemd/user/logitech_custom.service
Description=Autorun actions for Logitech

[Service]
Type=oneshot
ExecStart=/opt/bin/autorun_logitech.sh

Вы не должны запустить или включить .service.


Метод 2

При подключении устройства это должно быть видимо в systemctl list-units список (если это не обнаруживается как единица, необходимо ОТМЕТИТЬ + = устройство сначала, в основном то же как первый метод, но без ENV {systemd...}). Теперь можно использовать это имя единицы с udevadm info $(systemd-escape -u '<unit>' --path | sed 's/.device$//') добираться DEVLINKS=, еще раз прокрутите его systemd-escape '<devlink>' --path --suffix=device получить завершенное имя .device.

$ cat ~/.config/systemd/user/logitech_custom.service
[Unit]
Description=Autorun actions for Logitech mouse
Requires=dev-input-by\x2did-usb\x2dLogitech_USB_Receiver\x2dif02\x2dmouse.device
After=dev-input-by\x2did-usb\x2dLogitech_USB_Receiver\x2dif02\x2dmouse.device

[Service]
ExecStart=/opt/bin/autorun_logitech.sh

[Install]
WantedBy=dev-input-by\x2did-usb\x2dLogitech_USB_Receiver\x2dif02\x2dmouse.device


... и в последний раз включите свой systemd .service

$ systemctl --user enable logitech_custom.service
0
ответ дан 25 April 2020 в 10:43

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

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