본문으로 건너뛰기
  1. Posts/

리눅스에서 tty장치 권한 문제 해결하기

·
Linux
작성자
hw5e
page.hw5e.cc
목차

문제 상황
#

alt text

can’t open device"/dev/ttyACM0": Permission denied

리눅스에서 시리얼장치는 특정한 그룹에 속한 사용자만 접근할 수 있는 권한을 주기 때문에 발생하는 문제이다.

리눅스를 처음 사용하는 사람이 아두이노 같이 USB 장치를 직접 다뤄야 할 때 당황스러울 수 있는 부분이다. 윈도우에서는 장치를 동시에 접근하는거 아니면 딱히 신경 쓰일 것도 아니기도 하고.
사실 저런거 다룰 때 CLI만 쓰는 책같은 곳에서는 그냥 루트권한으로 때우는 경우도 있긴 한데 저런 GUI IDE같은걸 루트 권한으로 실행하진 않을 것이니 문제가 생긴다.

리눅스를 비롯한 유닉스 운영체제에서는 하드웨어 장치를 파일처럼 다루는데 사진의 에러에서 open이라는 표현을 사용한 것도 그 이유라고 볼 수 있다. 그래서 권한도 파일처럼 ls -la로 확인하면 된다.

ls -la /dev/ttyACM0
crw-rw---- 1 root dialout 166, 1 Dec 10 06:44 /dev/ttyACM1

해당 파일의 권한을 확인해보니 소유자는 root 그룹은 dialout이고 소유자와 그룹은 읽고 쓰는 것이 가능하지만 그 이외의 사용자는 읽기,쓰기가 불가능하다.

결론적으로 /dev/ttyACM0 파일을 읽고 쓸수 있는 권한이 없이 때문에 발생한 것이다.

문제 해결법
#

1.장치 이름 찾기
#

alt text
뭐 보통 저렇게 프로그램에 /dev로 시작하는 파일 이름이 적혀 있을 것이다.

sudo dmesg|grep tty

dmesg로 커널 메시지를 읽어서 연결되는 usb장치의 정보를 확인 할 수도 있다.

2.권한 부여하기
#

방법1 chmod 사용(일회용)
#

chmod o+rw /dev/ttyACM0

장치 파일에 읽기/쓰기 권한을 부여하면 된다.

왜 일회용이냐면 재부팅하거나 USB를 재연결 하면 권한 부여한게 사라져서 그때마다 다시해줘야 한다.

방법2 사용자를 그룹에 추가
#

ls -la /dev/ttyACM0
ls -la /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 0 12월 10일  03:32 /dev/ttyUSB0

ls -la로 장치 파일의 그룹을 확인한다. 여기선 그룹 이름이 uucp인데 리눅스 배포판마다 그룹 이름이 다를 수 있으니 직접 확인하는 것을 권장한다.

sudo usermod -aG "그룹 이름" "사용자 이름"
sudo usermod -aG uucp hw5e 

usermod를 사용해서 사용자를 그룹에 추가하고 재부팅하면 적용된다.

Reply by Email