AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1228950
Accepted
Marius Biegger
Marius Biegger
Asked: 2020-04-21 12:28:55 +0800 CST2020-04-21 12:28:55 +0800 CST 2020-04-21 12:28:55 +0800 CST

udev 规则运行的脚本失败

  • 772

我正在运行Ubuntu 18.4,我遇到了一个脚本问题,该脚本在udev rule触发时拒绝运行。

这是情况:我在 Surface Pro 4 上运行。该设备有一个可拆卸的键盘。我运行一个名为libinput-gestures的软件。每当键盘分离并重新连接时,手势将不起作用。手动修复很容易:

libinput-gestures-setup restart

所以我尝试运行的脚本正是这样做的。这是它的全部荣耀:

#!/bin/sh

libinput-gestures-setup restart

我想在 udev 规则的add事件上运行它。这是 .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 -xe 打印以下内容:

-- 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-gestures -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 属性识别它)并将其用于服务 REQUIRE/AFTER...

到目前为止,这一切看起来都很好。当我分离并重新连接键盘 journalctl -xe 时输出以下内容:

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.

如图所示,服务识别连接并启动脚本。脚本然后运行它的停止功能,但它不会再次启动。我知道这可能超出了此问题的范围,但您是否看到明显的原因?谢谢 :)

最后更新

我联系了该实用程序的开发人员。启动操作很可能会失败,因为应用程序需要在实际的用户会话中运行。不是通过系统服务。谢谢你的时间。

scripts usb udev libinput 18.04
  • 2 2 个回答
  • 2157 Views

2 个回答

  • Voted
  1. user986805
    2020-04-21T14:38:03+08:002020-04-21T14:38:03+08:00

    方法一:

    $ 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。


    方法二

    连接您的设备时,它应该在systemctl list-units列表中可见(如果它没有作为一个单元显示,您需要先 TAG+= 您的设备,与第一种方法基本相同,但没有 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
    
    • 2
  2. Best Answer
    Marius Biegger
    2020-08-28T23:59:15+08:002020-08-28T23:59:15+08:00

    因此,这里有一些延迟是关于如何解决这类问题的建议。

    首先,您应该阅读所有该主题及其评论,因为它可以深入了解如何设置

    已检测到正确的 D-Bus 消息并相应地启动脚本。但是 libinput-gestures 仍然存在问题,因为它能够停止但不能再次启动!问题是脚本作为系统运行重新启动操作。但是要启动,libinput-gestures 需要一个用户会话,因此脚本必须由用户运行。

    为此,libinput 的创建者创建了一个单独的工具。dbus 动作。我无法测试此应用程序,因为我的操作系统不符合所需的环境。但我希望你可以使用它:)

    • 0

相关问题

  • 如何每 5 秒运行一次脚本?

  • 如何将必须从其自己的目录中运行的程序添加到面板或主菜单?

  • 如何从命令行重置 USB 设备?

  • 如何编写 shell 脚本来安装应用程序列表?

  • Mac OS X Automator 的替代品?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve