我在使用 screen 时遇到了问题。每次我尝试通过控制台连接到路由器时,screen 都会终止。
eric@pop-os:~$ screen /dev/ttyUSB0
[screen is terminating]
eric@pop-os:~$ screen /dev/ttyUSB0
[screen is terminating]
它只能以 root 或超级用户身份工作。
答案1
您的用户帐号是否eric
有使用权限/dev/ttyUSB0
?要找出答案,请运行ls -l /dev/ttyUSB0
.输出可能如下所示:
$ ls -l /dev/ttyUSB0
crw-rw----+ 1 root dialout 166, 0 Jul 9 08:55 /dev/ttyUSB0
最左边一列的字符是文件类型和权限信息:
- 第一个字符是
c
,表示基于字符的设备。 - 最后一个字符是
+
,表示该设备节点上有一个访问控制列表(Access Control List,简称ACL),指定了进一步的访问规则。这很重要,因为它改变了其他权限的解释方式。 - 字符 2-4 是一个三字母组,
rw-
指示文件所有者的权限,如root
第三列所示。 - 第二组三个字母(
rw-
再次)通常表示适用于团体文件分配给的用户数。在这种情况下,该组dialout
如第四列所示。但因为这个文件有ACL,所以含义不同:当 ACL 生效时,它仅指示授予非文件所有者的特定用户或组的最高权限 - 但您无法知道它是哪个用户或组。 - 第三组三个字母 (
---
) 表示其他人的访问权限 - 如果全是破折号,则表示不允许访问。 - 最后一个字符是
+
,表示该设备节点上有一个访问控制列表(Access Control List,简称ACL),指定了进一步的访问规则。
最后,可以使用 来查看 ACL getfacl /dev/ttyUSB0
。输出可能如下所示:
$ getfacl /dev/ttyUSB0
getfacl: Removing leading '/' from absolute path names
# file: dev/ttyUSB0
# owner: root
# group: dialout
user::rw-
user:sddm:rw-
group::rw-
mask::rw-
other::---
基本上,它重复传统的非 ACL 文件权限,并允许为任意数量的用户和组指定额外的权限。在这种情况下,有一个额外的行user:sddm:rw-
指示对 user 的读和写访问权限,这是 GUI 登录管理器进程当前运行的sddm
用户帐户。sddm
还有一行group::rw-
确认经典组对此文件具有完全读/写访问权限 -当 ACL 应用于此设备节点时,dialout
此信息从经典输出中隐藏。ls -l
ACL 授予权限这一事实sddm
表明,如果您使用 GUI 登录对话框在本地登录,则该操作系统可能配置为自动授予对本地串行端口的访问权限。 ACL 将自动更改以匹配登录用户,并sddm
在用户注销时恢复到该状态。如果这样的 ACL 不存在,那么您的发行版可能不会使用这样的自动权限机制。
该组名称dialout
是历史性的,因为串行端口过去与调制解调器一起使用。但是,如果设备被分配到这样的特殊组,则表明该发行版可能已配置为使用该dialout
组管理对串行端口的访问。因此,在此示例中,您可能希望将您的用户帐户添加到dialout
组中。您需要 root/超级用户访问权限才能执行此操作:
# usermod -a -G dialout eric
新的组成员身份将在下次登录时生效,因此您需要注销并再次登录。
由于/dev
文件系统是基于 RAM 的虚拟文件系统,因此每次系统启动时,所有设备节点都会从头开始创建。因此,尝试更改实际设备节点的权限将是徒劳的;当您关闭系统时,您的更改将会被忘记。相反,设备的默认权限使用特定组,其明确目的是允许管理员使用组成员身份授予特定用户对特定类型设备的访问权限:按预期使用这些组可能是解决问题的最简单方法。