在 CrunchBang Linux(Debian 版本)上,我有一个 COM 端口ttyS0
,我正尝试将其与 NFC 设备一起使用。libnfc 响应说它看不到任何 NFC 设备,因此我尝试直接打开 COM 端口。为此,我使用了:
sudo cu -l /dev/ttyS0 -s 9600
但是,此命令返回:
cu: open (/dev/ttyS0): Permission denied
cu: /dev/ttyS0: Line in use
我不知道什么可能正在使用此连接。为了找出答案,我尝试读取所有打开的进程并过滤以下用途ttyS0
:
ps -ef | grep tty
但对于此命令,没有显示任何正在使用的内容ttyS0
。我还尝试抓取所有打开的文件并过滤锁定ttyS0
:
lsof | grep tty
但使用 则不会返回任何内容ttyS0
。
怎么可能cu
显示该线路正在使用,但ps
和lsof
使用该线路却不返回任何内容?
答案1
该行可能没有实际用途,但存在权限问题。对我来说,快速而肮脏的测试方法是执行:
ls -la /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB0
并重试cu
。如果它开始工作,您需要注意相应的udev
文件和用户权限/组。对于我的设备,它看起来像这样(作为plugdev
组中的成员):
> cat /etc/udev/rules.d/42-CP210x.rules
ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SUBSYSTEMS=="usb",
ACTION=="add", MODE="0666", GROUP="plugdev"
答案2
串行设备权限已授予dialout
组成员。为了连接,/dev/ttyS0
我使用以下命令将当前用户添加到组中:
sudo adduser <username> dialout
答案3
看来这是 中的一个错误。我通过使用以下命令cu
更改 的所有者组解决了此问题:/dev/ttyUSB0
chown root:root /dev/ttyUSB0
答案4
将您的用户添加到dialout
组中。根据系统的不同,可能还需要将您的用户添加到uucp
组中。
检查群组成员资格:
getent group dialout
或者检查你的用户:
groups `whoami`
如果有必要,添加您的用户:
usermod -aG dialout `whoami`
按照上面提到的方法进行验证getent
。