标签: udev

如何正确创建/dev/dvd?

/dev/dvd默认情况下,某些程序会查找 DVD。当我第一次在没有插入 DVD 的情况下启动我的计算机时,/dev/dvd存在并指向正确的位置 ( /dev/sr0)。但是,当我插入 DVD 时,就/dev/dvd消失了。我希望它一直存在,这样我就不必/dev/sr0在寻找 DVD 的程序中导航。如何确保/dev/dvd符号链接存在并指向正确的位置?

看起来我可以向/etc/udev/rules.d/70-persistent-cd.rules. 该站点提供了几个示例,但该70-persistent-cd.rules文件说“将 ENV{GENERATED}=1 标志添加到您自己的规则中”,这不是示例的一部分。该man 7 udev页面是坚不可摧的我,我不相信链接页面提供的信息,我需要100%。

那么,我可以在现代的 Ubuntu 12.04(或更高版本)系统上做些什么来使其/dev/dvd始终存在并指向正确的设备?

编辑:是否像ENV{GENERATED}=1在链接页面中添加规则一样简单,如下所示:

SUBSYSTEM=="block", KERNEL=="sr0", SYMLINK+="dvd", GROUP="cdrom", ENV{GENERATED}=1
Run Code Online (Sandbox Code Playgroud)

这是现代 Ubuntu 的正确信息吗?ENV{GENERATED}当它不是生成的而是手写的时候,在那里做什么?

udev 12.04

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

如何在 /dev 中创建新套接字?

我想在/dev. 获取它的方法是向 中添加新规则udev吗?

programming udev application-development sockets

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

如何使 noatime 挂载成为默认值?

我正在制作一个 Ubuntu 衍生产品,我想让 noatime 成为所有文件系统的默认挂载选项(而不是 Ubuntu 中默认的 relatime)。

似乎有一个布尔default_relatime内核参数用于在默认为 atime 或 relatime 之间切换(也可以通过写入 /proc/sys/kernel/default_relatime),但我找不到 noatime 的等效项,我不知道如何默认情况下在发行版中启用它。

如何配置以立即将数据记录到pendrive?建议有一种方法可以通过 udev 添加 noatime 挂载参数,但我不知道这是否适用于内部媒体以及如何操作。

使内核默认为 noatime 的侵入性最小的方法是什么?

可以使用“cat /proc/mounts”查看当前默认值,因为它甚至显示隐式挂载参数;不要相信“坐骑”。

是的,我读过使用 noatime 调整 Ext4 是否值得?我仍然想这样做。

filesystem mount kernel derivatives udev

9
推荐指数
1
解决办法
3098
查看次数

每当插入 U 盘时如何执行 C++ 程序

我有一个 C++ 程序可以访问 USB 笔式驱动器/闪存驱动器。它适用于当前插入的闪存驱动器。一个普通的 C++ 程序在我们运行它之前不会执行。但我希望程序在插入闪存驱动器时自动运行。我怎样才能做到这一点?

usb-drive usb udev c++

9
推荐指数
2
解决办法
4770
查看次数

包 udev 尚未配置

今天我决定将我的 Ubuntu Desktop 14.04 LTS 升级到 16.04。不幸的是,升级过程在途中崩溃了,不知道为什么。如果我在 Grub 中选择第一个 Ubuntu 选项,当我重新启动时,我只剩下黑屏。但是,我有一个“高级 Ubuntu 选项”(或类似选项),其中有很多不同的选项:

Ubuntu
Advanced options for Ubuntu
        Ubuntu, with Linux 4.4.0-28-generic
        Ubuntu, with Linux 4.4.0-28-generic (upstart)
        Ubuntu, with Linux 4.4.0-28-generic (recovery mode)
        Ubuntu, with Linux 4.2.0-41-generic
        Ubuntu, with Linux 4.2.0-41-generic (upstart)
        Ubuntu, with Linux 4.2.0-41-generic (recovery mode)
        Ubuntu, with Linux 4.2.0-38-generic
        Ubuntu, with Linux 4.2.0-38-generic (upstart)
        Ubuntu, with Linux 4.2.0-38-generic (recovery mode)
        Ubuntu, with Linux 4.2.0-36-generic
        Ubuntu, with Linux 4.2.0-36-generic (upstart)
        Ubuntu, with Linux 4.2.0-36-generic (recovery mode)
        Ubuntu, with …
Run Code Online (Sandbox Code Playgroud)

upgrade kernel udev

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

升级到 20.04.1 LTS 后蜂鸣声不再工作

我刚刚完成升级到 Ubuntu Server 20.04.1 LTS,到目前为止,只出现了一个问题:以用户身份运行时,命令beep返回

蜂鸣声:错误:无法打开任何设备`。

正如预期的那样,跑步sudo beep不起作用。经过一些研究后,我发现beep系统上不存在任何组,正如手册页所预期的那样。我尝试过重新安装和重新配置,但没有成功。

更奇怪的是,beep在启动期间可以通过rc.local; 然而,在某些时候,它会停止工作并返回错误,从而破坏了我的rc.local例程。另外,这个命令工作得很好:

sudo env -u SUDO_GID -u SUDO_COMMAND -u SUDO_USER -u SUDO_UID beep
Run Code Online (Sandbox Code Playgroud)

澄清一下:我正在运行一个未连接到任何扬声器的无头家庭服务器;简单的发声扬声器用于在启动期间以及出现需要干预的错误时提供简单的反馈。我的设置过去在 Ubuntu Server 18.04 LTS 下运行良好。

sound udev evdev

9
推荐指数
2
解决办法
9213
查看次数

如何从脚本中检测触摸屏设备?

我正在寻找一种可靠的方法来通过脚本检测笔记本电脑是否具有触摸屏设备。我知道我可以解析以下输出:

$ xinput --list
? Virtual core pointer                          id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
?   ? ELAN Touchscreen                          id=10   [slave  pointer  (2)]
?   ? SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
? Virtual core keyboard                         id=3    [master keyboard (2)]
    ? Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ? Power Button                              id=6    [slave  keyboard (3)]
    ? Video Bus                                 id=7    [slave  keyboard (3)]
    ? Power Button                              id=8    [slave  keyboard (3)]
    ? TOSHIBA Web …
Run Code Online (Sandbox Code Playgroud)

command-line udev touchscreen xinput

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

在 Ubuntu 16.04 上长时间运行 udev 脚本

在 Ubuntu 14.04 上,我有一个长时间运行的 bash 脚本,其中有一个简单的 udev 规则,它的工作原理如下:

ACTION=="change", SUBSYSTEM=="block", RUN+="/opt/script.sh"
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 16.04 上,事情进展得并不顺利。脚本开始运行,但在它完成之前就被杀死了。然后我尝试更改我的 udev 规则以调用一个可以分离脚本的 warapper 脚本。我试过:

ACTION=="change", SUBSYSTEM=="block", RUN+="/opt/script.sh"
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

#!/bin/sh
nohup /opt/script.sh  &
Run Code Online (Sandbox Code Playgroud)

无济于事。

然后我尝试创建一个 systemd 服务...

ACTION=="change", SUBSYSTEM=="block", ENV{SYSTEMD_WANTS}=="justrunthescript.service"
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/justrunthescript.service

[Unit]
Description=Just run the script

[Service]
ExecStart=/opt/script.sh
Run Code Online (Sandbox Code Playgroud)

我必须在某个时候运行脚本,但我的脚本依赖于 udev 参数,如 $ID_FS_TYPE 不会以这种方式传递。

我想我想要的很简单,只需插入一张光盘并从 udev 规则运行我的脚本,不要杀死脚本。解决这个问题的最佳方法是什么?

command-line scripts udev systemd 16.04

8
推荐指数
1
解决办法
2171
查看次数

Ubuntu 17.04:如何根据路径重命名 USB 网络接口?(不基于MAC)

不,这不是为什么我的 Wi-Fi 适配器在 16.04 中不显示为 wlan0?,因为这解释了如何恢复eth0命名,而不是如何单独命名特定接口。

我不想根据 MA​​C 匹配进行分配。我所需要的只是根据 USB 路径分配名称。

当我插入 USB 网络适配器时,在 Ubuntu 17.04 上,它会根据其 MAC 分配一个网络接口名称,例如encx000000000000. 现在我想根据它的 ID_PATH= 将它重命名为更能说明问题的名称pci-000:02:03.0-usb-0:1:1.0。特别是,我不想根据 MA​​C 地址进行匹配。理由是更换接口后一切都会崩溃,但如果有人简单地更换网络接口硬件,使新硬件与旧硬件在同一位置,系统将在不需要 IT 和重新配置支持的情况下继续运行。

所以我创建了一个文件/etc/systemd/network/50-my-island.link

[Match]
Path=pci-000:02:03.0-usb-0:1:1.0
[Link]
Name=island0
Run Code Online (Sandbox Code Playgroud)

不幸的是,该名称从未分配过。使用udevadm info我可以看到有ID_NET_NAME=island0设置,但它不适用。尝试NamePolicy=NamePolicy=name在该[Link]部分下也无济于事。

我迷路了!如何将 .link 文件中的名称分配给我的 USB 网络适配器?在不诉诸某些 udev 规则的情况下,这完全可能吗?当 .link 文件在我的情况下似乎不起作用时,为什么还要有 .link 文件呢?我在哪里犯了错误?

networking udev systemd 17.04

8
推荐指数
1
解决办法
8684
查看次数

Systemd:DISPLAY、XAUTHORITY 变量不足以在 Wayland 中启动图形对话

每次具有 SMART 功能的特定设备插入 USB 端口时,我都会在systemd .conf文件中使用以下内容来运行图形对话框。zenity这在使用显示服务器的 Xubuntu 中工作正常,但在WaylandX服务器中对话框显示zenity失败。

\n
USER=myName\nDISPLAY=:0.0\nWAYLAND_DISPLAY=wayland-0\nXAUTHORITY=/home/myName/.Xauthority\nHOME=/home/myName\nSHELL=/bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试在 Ubuntu 23.10 中添加WAYLAND_DISPLAY=wayland-0Wayland服务器的.confzenity文件,但对话仍然无法显示。我还需要做什么?

\n
\n

我的setup-01的文件列表:

\n
/bin/hdd_smart_dump_on_usb_trigger.sh\n/etc/00_hdd_smart_dump_on_usb_trigger.conf\n/etc/systemd/system/hdd_smart_dump_on_usb_trigger@.service\n/etc/systemd/system/hdd_smart_dump_on_usb_trigger@.service.d/disable_manual_start.conf\n/etc/systemd/system/hdd_smart_dump_on_usb_trigger@.target\n/etc/udev/00_hdd_smart_dump_on_usb_trigger.udev.sh\n/etc/udev/rules.d/99-hdd-smart-dump-on-usb-trigger.udev.rules\n
Run Code Online (Sandbox Code Playgroud)\n

内容/etc/00_hdd_smart_dump_on_usb_trigger.conf

\n
USER=myName\nDISPLAY=:0.0\nWAYLAND_DISPLAY=wayland-0\nXAUTHORITY=/home/ajthapa/.Xauthority\nHOME=/home/myName\nSHELL=/bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n

内容/etc/systemd/system/hdd_smart_dump_on_usb_trigger@.service

\n
[Unit]\nDescription=HDD SMART Dump on USB Trigger - service unit for %I\nDocumentation=man:systemd.unit(5) man:systemd.exec(5) man:systemd.special(7) man:systemd.target(5)\nConditionPathExistsGlob=/sys/class/block/sd*\n# RefuseManualStart=true\n# RefuseManualStop=true\n\n[Service]\nEnvironmentFile=/etc/00_hdd_smart_dump_on_usb_trigger.conf\nExecStart=-/bin/bash -c '/bin/hdd_smart_dump_on_usb_trigger.sh -d %i -t "start_of_session"'\n
Run Code Online (Sandbox Code Playgroud)\n

内容/etc/systemd/system/hdd_smart_dump_on_usb_trigger@.service.d/disable_manual_start.conf

\n
[Unit]\n## Allow only to be started/stopped by …
Run Code Online (Sandbox Code Playgroud)

command-line wayland udev systemd

8
推荐指数
1
解决办法
390
查看次数