我正在运行 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 进行拨号。
我决定检查一下我的以太网设备最终会使用什么名称,但与其他发行版相反,Debian 似乎没有激活此更改(或者正在阻止它?),
- 现在保留旧的持久网络接口命名方案,并通过内核命令行上的 net.ifnames=1 选择加入新的命名方案。
问题是我必须编辑 grub 内核行,这对于可以通过修改文件来禁用的东西来说似乎有点过分了。还有其他方法吗?
我可以编写依赖于挂载的单元文件,因为我可以列出它们然后添加到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为插入的任何 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) 我将外置硬盘插入我的笔记本电脑。我尝试通过以下方式找出信息
$ 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) 我偶然发现了我的 BunsenLabs GNU/Linux(基于 Debian)的奇怪行为。
有时我无法关闭操作系统。我是使用sudo poweroff还是 GUI 方法都没有关系。
这是我运行后得到的sudo poweroff:
Run Code Online (Sandbox Code Playgroud)Failed to start poweroff.target: Transaction is destructive
有解决方法吗?为什么会发生?
这是我的内容/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) 我在/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 的手册页在多处提到某些规则选项可用于调用“内置”命令,这些命令显然内置于 udev 程序本身。但是,我找不到任何参考文档清楚地解释了可用的 udev 内置函数;它们做什么以及如何使用它们。
我在网上搜索过,但没有取得多大成功。有谁知道是否有任何地方提供有关这些内置命令的详细信息的参考?
我最近购买了一台联想 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-proxy,udev如Gnome 3,我其实不在乎那么多的地方完成。我似乎没有找到任何可以轻松更改以实现我需要的配置文件。
作为现在的解决方法,我使用上面链接的 Ask ubuntu 问题中的脚本,并进行了修改以解决未对齐的显示/加速度计问题。为此,我必须禁用 Gnome 3 中的自动屏幕旋转。虽然此解决方案还允许onboard根据当前方向自动启动和终止(屏幕键盘),但它有点违背了 Gnome 3 屏幕旋转设置的目的.
我目前正在探索 Linux Mint 上的目录树,同时通过我购买的一本书来支持它。嗯,书上特别说:
该
/dev目录包含所有设备的特殊设备文件。设备文件是在安装过程中创建的,稍后使用/dev/MAKEDEV脚本创建。这/dev/MAKEDEV.local是由系统管理员编写的脚本,用于创建仅限本地的设备文件或链接 (...)
我找不到那个脚本,我应该找到它还是在安装新设备时生成它?