%k 未在 udev 规则中返回内核编号

%k 未在 udev 规则中返回内核编号

这一页(几年来修改了数十次。太棒了!)提供了 a-to-z 的udev内容:

%k计算结果为设备的内核名称,例如“sda3”,该设备(默认情况下)出现在/dev/sda3%n计算结果为设备的内核编号(存储设备的分区编号),例如“3”代表/dev/sda3

但对我来说,在上面的示例中%k返回了我的加密狗。sda

我认为影响规则的部分udev是(它是通过安装的这个德布这一页,并且它需要专有的加密狗顺便说一句):

LABEL="codemeter_mount"
IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_UUID}!="", ENV{dir_name}="%E{ID_FS_UUID}"  
#ENV{ID_FS_UUID}=="", ENV{dir_name}="cm-%k"
ENV{ID_FS_UUID}=="", ENV{dir_name}="cm-pickone"                                     # Use static path. Multiple dongles are not intended to be used, so this should be ok.
RUN+="/bin/mkdir -p /media/CodeMeter/%E{dir_name}"
RUN+="/bin/mount /dev/%k /media/CodeMeter/%E{dir_name} -o umask=0000,uid=1,gid=1"

上面的规则期望安装在例如上,/dev/sdb1但由于提到的问题,/dev/%k成为磁盘的路径,而不是分区,因此mount失败(我发现的一个快速破解是使用%k%n)。

我误解了什么吗?

如下所示,我使用的是 Ubuntu Xenial,但我在 Trusty 上看到了同样的情况。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial
$ apt-cache policy udev
udev:
  Installed: 229-4ubuntu21
  Candidate: 229-4ubuntu21
  Version table:
 *** 229-4ubuntu21 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     229-4ubuntu10 500
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
     229-4ubuntu4 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

相关内容