Arch Linux Arduino 无法使用串列埠(Serial Port)

Arch Linux Arduino 无法使用串列埠(Serial Port)

平常都是在OS X上使用Arduino开发,后续因为接触到Arch Linux后想把平常的操作看看能不能搬到Arch Linux上,结果程式上传至Arduino板子时发生问题:

讯息中了解到没有权限能开启,查证后发现一般将USB装置连接时,系统会有预设的权限,但这个权限并非让使用者本身能使用: (以Arduino Leonardo为例)

    [danny@nb-a1410 dev]$ ls -l /dev/ttyACM0
    crw-rw---- 1 root uucp 166, 0 Mar 18 15:05 /dev/ttyACM0
    [danny@nb-a1410 dev]$

所以只要将此装置连接后让使用者能有权限使用它就可解决问题,以下提供2个方法。

加入群组

Arch官方有提供它的做法点这里,只要将使用者加入群组也能拥有此权限,官方建议加入2个群组uucplock

gpasswd -a 使用者名称 uucp
gpasswd -a 使用者名称 lock

如果再不行的话就加入tty

gpasswd -a 使用者名称 tty

加入后能利用id命令对使用者查询目前所属的群组:

id 使用者

结果:

    uid=1000(danny) gid=1000(danny) groups=1000(danny)

确定无误后重新启动Arduino IDE就解决问题,不过还有另外的方法,就是在USB装置连接后,将USB装置名称的属性变更为使用者能使用的属性就行,下面会进行了解。

变更周边名称属性

Linux中管理一些装置连接的都使用udev,这是与kernel有关的功能,这主要是让你在连接装置设备后会产生对应的名称让应用程式去使用,像我们硬碟会有sdasdb或是USB串列的ttySUSB0…等,当然会提供一些规则(rule)做客制化的功能,接下来要利用此功能让USB装置连接后变更它的属性。

建立规则档后放入/etc/udev/rules.d/后功能就会启用,在这不说明udev的功能,直接将规则内容列出:

建立新规则档案

sudo nano /etc/udev/rules.d/52-arduino.rules

将下面规则贴入档案中并存档

    SUBSYSTEMS=="usb", KERNEL=="ttyACM[0-9]*", MODE="0777"
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", MODE="0777"


此规则功能主要将USB装置中所产生的ttyACM0~ttyACM9、及ttyUSB0~ttyUSB9的属性变0777,开放所有人可以存取使用。

规则重新生效

存档完成后执行命令让规则生效

    sudo udevadm trigger

查看属性

之后再重新将Arudino重新连接,此时可以看一下属性:

ls -l /dev/ttyACM0

应该就能看到属性都变了:

    crwxrwxrwx 1 root uucp 166, 0 Mar 18 15:39 /dev/ttyACM0

接下来重新启动Arduino IDE就能顺利使用。