我想创建一个 systemd 服务单元文件,该文件具有对另一个服务创建的伪终端的依赖性Requires=
。After=
本网站描述如何通过添加TAG+=systemd
到 UDEV 规则来为真实设备执行此操作。因此,类似下面的操作将生成一个 systemd 设备单元文件,其他服务可以依赖该文件:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", PROGRAM="/etc/udev/usbtty.sh %k", SYMLINK+="ttyMyDev,OWNER="mydev", TAG+="systemd"
这将在/dev/ttyMyDev
USB TTY 设备上创建一个符号链接,并让 systemd 创建一个dev-ttyMyDev.device
单元。
然而,为了模拟虚拟设备,我们有一个服务,它将创建一个伪终端,而不是使用posix_openpt(3) 接口。我希望这项服务还能够创建一个新的 UDEV 规则文件,/run/udev/rules.d
然后让 systemd 能够创建一个dev-ttyMyVirtualDev.device
单元文件。
但是,我不知道如何让 UDEV 识别该设备。例如,如果我运行以下socat
命令,它将创建一个/dev/pts/4
伪终端:
$ sudo socat -d -d PTY,waitslave,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork
2022/10/11 12:33:18 socat[24833] N PTY is /dev/pts/4
但我无法用以下方式查询udevadm info
:
haz@haz-tower:/sys/devices/virtual/tty/ptmx$ udevadm info /dev/pts/4
Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.
所以我不知道在KERNEL==
UDEV 规则文件的字段中应该放什么。
UDEV 是否没有能力触发伪终端的创建?