标签: udev

在systemd下编写udev规则以停止服务的正确方法是什么

我正在运行 Arch Linux,我有一个 udev 规则,它在插入设备时启动服务。在这种情况下,它会在插入 3G 调制解调器时拨打连接。

KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="netcfg@wvdial.service"
Run Code Online (Sandbox Code Playgroud)

但是,如果设备被移除,systemd 不会停止该服务,因此当它再次插入时,它不会启动该服务,因为它已经在运行。

我需要的是一个匹配的 udev 规则,该规则在移除设备以停止服务时运行。

更新

使用下面的答案,我现在拥有的是以下 udev 规则

KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
Run Code Online (Sandbox Code Playgroud)

使用以下服务文件(基本上是从 netcfg 服务文件复制和粘贴的:

[Unit]
Description=Netcfg networking service for Vodafone Dongle
Before=network.target
Wants=network.target
BindsTo=dev-gsmmodem.device
After=dev-gsmmodem.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/netcfg check-iface wvdial
ExecStop=-/usr/bin/netcfg down wvdial
KillMode=none

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我正在使用netcfg-wvdialAUR 进行拨号。

linux udev systemd

13
推荐指数
1
解决办法
9312
查看次数

如何启用“可预测的网络接口名称”?

我决定检查一下我的以太网设备最终会使用什么名称,但与其他发行版相反,Debian 似乎没有激活此更改(或者正在阻止它?),

  • 现在保留旧的持久网络接口命名方案,并通过内核命令行上的 net.ifnames=1 选择加入新的命名方案。

问题是我必须编辑 grub 内核行,这对于可以通过修改文件来禁用的东西来说似乎有点过分。还有其他方法吗?

debian udev systemd

12
推荐指数
2
解决办法
2万
查看次数

如何在启动服务之前等待 /dev/video0

我可以编写依赖于挂载的单元文件,因为我可以列出它们然后添加到Requires=xxx,例如:

# systemctl list-units | grep data
mount-data.service    loaded active exited    Manage the data partition
Run Code Online (Sandbox Code Playgroud)

我想要做的是在网络摄像头插入设备时启动服务。systemctl list-units | grep video0什么都不返回。有人可以用简单的术语解释我,我该怎么做才能确保做到这一点?我不希望发生的是启动服务的时候/dev/video0/dev/video1等出现。

我从这篇文章中得到了一个线索,我需要写一个 udev 规则,但我不知道这里到底需要做什么。帮助?

udev systemd

12
推荐指数
1
解决办法
6976
查看次数

Udev 规则匹配任何 USB 存储设备

如何udev为插入的任何 USB 大容量存储设备实施规则,而不仅仅是针对特定的?什么应该改变的idVendor,和idProduct

 ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0204", SYSFS{idProduct}=="6025",
     RUN+="/home/workspace/bash_script.sh"
Run Code Online (Sandbox Code Playgroud)

udev

12
推荐指数
1
解决办法
1万
查看次数

理解 `udevadm info -a -n /dev/sdb` 的输出

我将外置硬盘插入我的笔记本电脑。我尝试通过以下方式找出信息

$ udevadm info -a -n /dev/sdb

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host10/target10:0:0/10:0:0:0/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{range}=="16"
    ATTR{ext_range}=="256"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="312581808"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="0"
    ATTR{capability}=="50"
    ATTR{stat}=="     322    11207 …
Run Code Online (Sandbox Code Playgroud)

storage pci usb udev devices

11
推荐指数
1
解决办法
2万
查看次数

BunsenLabs(Debian 衍生物)不会关闭(无法启动 poweroff.target:事务具有破坏性)

我偶然发现了我的 BunsenLabs GNU/Linux(基于 Debian)的奇怪行为。

有时我无法关闭操作系统。我是使用sudo poweroff还是 GUI 方法都没有关系。

这是我运行后得到的sudo poweroff

Failed to start poweroff.target: Transaction is destructive
Run Code Online (Sandbox Code Playgroud)

有解决方法吗?为什么会发生?


这是我的内容/lib/udev/rules.d/70-power-switch.rules

ACTION=="remove", GOTO="power_switch_end"

SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="acpi", TAG+="power-switch"
SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="thinkpad_acpi", TAG+="power-switch"

LABEL="power_switch_end"
Run Code Online (Sandbox Code Playgroud)

shutdown udev systemd bunsenlabs

11
推荐指数
2
解决办法
1万
查看次数

挂载磁盘的 Udev 规则不起作用

我在/etc/udev/rules.d/81-external-disk.rules中有以下内容:

ENV{ID_FS_UUID}=="6826692e-79f4-4423-8467-cef4d5e840c5", RUN{program}+="/bin/mount -o nofail,x-systemd.device-timeout=1 -t ext4 -U 6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external"
Run Code Online (Sandbox Code Playgroud)

运行后:

udevadm control --reload ; udevadm trigger /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

它什么都不做。但是,如果我更改了诸如 /bin/touch /tmp/xyz 之类的挂载命令,它会起作用。

版本:

[root@helsinki rules.d]# rpm -qa | grep udev
libgudev1-219-19.el7_2.12.x86_64
python-pyudev-0.15-7.el7_2.1.noarch
[root@helsinki rules.d]# rpm -qa | grep systemd
systemd-libs-219-19.el7_2.12.x86_64
systemd-219-19.el7_2.12.x86_64
systemd-sysv-219-19.el7_2.12.x86_64
[root@helsinki rules.d]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
Run Code Online (Sandbox Code Playgroud)

udev mount

11
推荐指数
2
解决办法
2万
查看次数

有没有关于 udev 内置函数的文档?

udev 的手册页在多处提到​​某些规则选项可用于调用“内置”命令,这些命令显然内置于 udev 程序本身。但是,我找不到任何参考文档清楚地解释了可用的 udev 内置函数;它们做什么以及如何使用它们。

我在网上搜索过,但没有取得多大成功。有谁知道是否有任何地方提供有关这些内置命令的详细信息的参考?

documentation udev reference

11
推荐指数
2
解决办法
2219
查看次数

更改 Gnome shell 中自动屏幕旋转的工作方式

我最近购买了一台联想 Yoga 3 11" 可转换笔记本。它与 Ubuntu Gnome LTS 16.04.2 开箱即用 - WiFi、蓝牙,甚至暂停和恢复工作,到目前为止没有任何问题。

我注意到 Gnome 3 甚至允许屏幕根据内置的旋转传感器自动旋转。Yoga 3 11" 确实提供iio-sensor-proxy了 Ubuntu Gnome 中默认安装的旋转传感器。碰巧的是,报告的方向iio-sensor-proxy似乎偏离了 90°。

带有 15.04 (Gnome) 的 Dell 13 7000 上的自动旋转屏幕在处理屏幕旋转的自定义 shell 脚本方面有一个解决方案。我宁愿不使用此解决方案,因为它禁用了 Gnome Shell 中的“禁用屏幕旋转”按钮。

我已经做了一些研究,发现iio-sensor-proxy应该会导致udev触发一个事件,然后 Gnome 3 使用该事件通过xrandr. 但是,我无法找到一种方法来告诉udevGnome 3 或 Gnome 3 加速度计的安装方向与显示器不同,这需要在两者之间转换方向。

所以,问题是:如何做到这一点?定向重映射应该在可能的两种iio-sensor-proxyudev如Gnome 3,我其实不在乎那么多的地方完成。我似乎没有找到任何可以轻松更改以实现我需要的配置文件。

作为现在的解决方法,我使用上面链接的 Ask ubuntu 问题中的脚本,并进行了修改以解决未对齐的显示/加速度计问题。为此,我必须禁用 Gnome 3 中的自动屏幕旋转。虽然此解决方案还允许onboard根据当前方向自动启动和终止(屏幕键盘),但它有点违背了 Gnome 3 屏幕旋转设置的目的.

udev xrandr touch-screen gnome3

10
推荐指数
1
解决办法
1万
查看次数

为什么我在 /dev 文件夹中找不到 MAKEDEV?

我目前正在探索 Linux Mint 上的目录树,同时通过我购买的一本书来支持它。嗯,书上特别说:

/dev目录包含所有设备的特殊设备文件。设备文件是在安装过程中创建的,稍后使用/dev/MAKEDEV脚本创建。这/dev/MAKEDEV.local是由系统管理员编写的脚本,用于创建仅限本地的设备文件或链接 (...)

我找不到那个脚本,我应该找到它还是在安装新设备时生成它?

terminal udev linux-mint

10
推荐指数
1
解决办法
4181
查看次数