/dev/tty* and /dev/ttyUSB* 등에 대한 퍼미션 설정

Ubuntu에서 시리얼 통신이나 기타 USB 디바이스를 이용할 경우, 기본 권한 및 퍼미션이 슈퍼 유저만 사용 가능하도록 설정되어있다. 따라서 매번 sudo 명령을 이용해 사용자 프로그램을 실행하거나, sudo chmod 명령으로 일반 사용자도 읽고 쓸수 있도록 설정해줘야 한다.

먼저 /dev/tty* 에 대한 권한 및 퍼미션 해결 방법. 사용자 계정을 dialout, tty 그룹에 추가해 준다.

$ sudo usermod -a -G dialout $USER
$ sudo usermod -a -G tty $USER

다음으로 USB 디비이스에 대한 해결 방법.

udev 룰을 추가해준다.

/etc/udev/rules.d 디렉토리에 안에 임의의 룰 파일을 생성해준다. 보통 앞의 숫자는 우선 순위이고, 확장자는 .rules 를 사용한다.

예) /etc/udev/rules.d/50-ttyusb.rules

KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="0403"

또, USB 디바이스가 연결될 때, 특정 작업을 수행하려면, RUN 옵션을 추가한다.

KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="0403" ATTRS{idProduct}=="6001" RUN+="/bin/setserial -v /dev/%k low_latency"

idVendor나 idProduct는 기기에 따라 다르므로, 이를 확인하려면 https://ahnbk.com/?p=296 포스트를 참고.

Solve “permission denied” when using libusb on Ubuntu

libusb를 이용한 디바이스를 Ubuntu에 연결하고, 관련 프로그램을 실행시 “Permission denied” 혹은 알수없는 오류를 발생하는 경우가 있다. 보통 sudo 명령을 이용하여 실행하면 잘 해결되는 경우인데, 매번 sudo를 붙여서 실행하는 것이 번거롭다. 이때는 udev 룰을 추가하면 해결된다. (제조사에서 제공하는 경우도 있다.)

사용자가 udev 룰을 추가하려면 해당 디바이스의 Vender ID, Product ID를 알아내야 한다. 이는 디바이스를 연결하고, 터미널에서 다음과 같이 입력한 다음 확인이 가능하다.

$ dmesg

이때 나오는 메시지 중 idVendor, idProduct에 나오는 값을 기억한다.

/etc/udev/rules.d 에 다음과 같이 파일을 작성한다.

$ cd /etc/udev/rules.d
$ vi 99-<user_device>.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="<Vendor ID>", ATTRS{idProduct}=="<Product ID>", MODE="0666"

저장한 다음, 디바이스를 뽑았다가 다시 꼽으면 해결된다.