为什么 root 用户没有收到“设备或资源忙”响应?

Dev*_*laN 6 root modem devices

我正在使用 GSM 调制解调器并使用/dev/ttyUSB2设备。

设备拥有适当的权利:

$ ls -alh /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 2 May 25 19:44 /dev/ttyUSB2
Run Code Online (Sandbox Code Playgroud)

我在dialout组中,只能向该调制解调器发送一次 AT 命令。发送“ATD”命令(echo -e -n "ATD ...;\r" > /dev/ttyUSB2)后,根据lsof /dev/ttyUSB2进程ModemManager打开这个文件,如果我发送另一个 AT 命令,我会收到消息:

bash: /dev/ttyUSB2: Device or resource busy
Run Code Online (Sandbox Code Playgroud)

好的,由于某种原因,ModemManager 使该文件处于忙碌状态,但是当发生这种情况时,我仍然可以以相同的方式发送命令,但来自root用户。

我有两个问题:

  1. 为什么 root 用户可以覆盖此“设备或资源繁忙”锁定?
  2. 普通用户应该像根用户一样绕过它的哪些权限/其他设置。

小智 1

我最近在 Gentoo 上使用时遇到了类似的错误wvdial(使用正确配置的内核、usb_modeswitch设置、验证 wvdial 设置可以在另一个系统上工作等)。正如您所描述的,root 可以轻松初始化调制解调器并连接到 Internet,而dialout组中的用户会收到与您非常相似的错误消息。相关的设备文件是:

$ ls -l /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 2 Apr  6 01:43 /dev/ttyUSB2
Run Code Online (Sandbox Code Playgroud)

问题原来是 wvdial 无法在我的系统上/run/lock拥有的下创建必要的锁定文件root:uucp。将我的常规用户添加到 后uucp,可以创建锁定文件:

$ ls -la /run/lock
drwxrwxr-x  2 root uucp  80 Apr  6 01:43 .
drwxr-xr-x 10 root root 520 Apr  6 01:44 ..
-rw-r--r--  1 foo  foo   11 Apr  6 01:43 LCK..ttyUSB2
[...]
Run Code Online (Sandbox Code Playgroud)

并且用户能够成功连接,就像 root 一样。(如果您想知道,find / -group uucp则不会返回除该文件夹之外的任何内容。)

我不熟悉ModemManager(也不习惯直接写入/读取设备文件),但考虑到我们描述的相似性,我怀疑您可能需要将常规用户添加到另一个补充组。尝试以 root 身份建立连接并检查 ModemManager 涉及哪些其他文件;其中之一(或父目录)可能是问题的根源。