Linux /在Lubuntu引导时,dev/ttyACM0访问被拒绝,但在任何其他时间都有效

Linux /在Lubuntu引导时,dev/ttyACM0访问被拒绝,但在任何其他时间都有效,linux,ubuntu,arduino,serial-port,Linux,Ubuntu,Arduino,Serial Port,我正在尝试在Lubuntu 19.04上启动一个程序,该程序通过与/dev/ttyACM0的串行通信与我的Arduino Due设备(机器人)进行通信。一切似乎都很好,直到我尝试在启动时启动应用程序 只有当我尝试在登录时启动应用程序时,问题才会出现。以用户身份运行它,从终端,从。桌面文件,从脚本等都不是问题,我能够建立10/10次连接 请记住,我现在正在手动输入$USER,在每个命令中,它都作为我的实际用户名显式传递 这不应该是权限问题 $ ls -la /dev/ ... crw-rw-rw-

我正在尝试在Lubuntu 19.04上启动一个程序,该程序通过与/dev/ttyACM0的串行通信与我的Arduino Due设备(机器人)进行通信。一切似乎都很好,直到我尝试在启动时启动应用程序

只有当我尝试在登录时启动应用程序时,问题才会出现。以用户身份运行它,从终端,从
。桌面
文件,从脚本等都不是问题,我能够建立10/10次连接

请记住,我现在正在手动输入
$USER
,在每个命令中,它都作为我的实际用户名显式传递

这不应该是权限问题

$ ls -la /dev/
...
crw-rw-rw-   1 root dialout 166,     0 mar 13 17:27 ttyACM0
...
我已尝试从
.xsessionrc
运行它,使用:

#!/bin/bash

# Some other commands to set the environment up

/home/$USER/user_panel /dev/ttyACM0
我还尝试过使用Autostart在LXQt会话设置中设置它,因此我最终得到了一个
.desktop
条目:

$ cat ./.config/autostart/$USER\ User\ Panel.desktop

[Desktop Entry]
Exec=/home/$USER/user_panel /dev/ttyACM0
Name=User Panel
Type=Application
Version=1.0
我尝试手动启动这两个文件,一切正常,应用程序启动,连接成功

我也试着制定我的udev规则

$ cat /etc/udev/rules.d/50-myusb.rules 

KERNEL=="ttyACM[0-9]*", MODE="0666

因此,我的问题是:我应该寻找什么作为启动时拒绝的原因?

我不知道这是否是同一个问题,但在USB连接的热启动过程中打开/dev/ttyACM0时,我被“拒绝访问”。我检查了权限,重写了内核以获得设备的所有权,但仍然得到了相同的错误。除非我正在调试,在这种情况下,访问是可以的

问题似乎是设备还没有启动,而延迟半秒(您可能必须增加延迟以找到有效的方法)足以让设备初始化并正确访问。在尝试打开有限循环时,尝试在有限循环中放置一个短延迟


希望这有帮助。

谢谢你的回答@mike。不幸的是,我曾尝试在启动脚本中设置延迟,但即使是10秒或15秒也没有任何区别。老实说,我仍然不知道这里的原因是什么。另一方面,我通过使用
systemd
(我将在单独的回答中对此进行说明)成功地克服了错误,但我仍然被迫在客户端应用程序中使用10秒延迟,因为在最初几秒钟内没有通信包通过我的连接(尽管串行端口已成功打开)。
$ cat /etc/udev/rules.d/50-myusb.rules 

KERNEL=="ttyACM[0-9]*", MODE="0666