Python의 serial 모듈을 사용하여 리눅스에서 시리얼 포트 접근시 다음과 같은 에러가 발생했습니다.
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyACM0
[Errno 13] Permission denied: '/dev/ttyACM0'
검색해보니 /dev/ttyACM0 시리얼 포트에 대한 접근 권한이 없기 때문이라고 합니다. 이 문제를 해결하는 몇 가지 방법을 정리해봤습니다.
2024. 4. 10 최초작성
1. 현재 사용자를 `dialout` 그룹에 추가하기
대부분의 리눅스 배포판에서 dialout 그룹에 현재 로그인한 사용자를 추가하면 시리얼 포트에 접근할 수 있는 권한을 부여하게 된다고 합니다. 하지만 적용해봤는데 사용중인 우분투에서는 되지 않았습니다.
방법은 다음과 같습니다.
dialout 그룹에 현재 로그인한 사용자를 다음처럼 추가하고 재로그인합니다.
$ sudo usermod -a -G dialout $USER
2. `udev` 규칙 생성하기
`udev` 규칙을 사용하면 특정 장치에 대해 자동으로 권한을 설정할 수 있습니다.
예를 들어, `/etc/udev/rules.d/` 디렉토리에 새 규칙 파일을 생성하여 `/dev/ttyACM0`에 대한 권한을 설정할 수 있습니다.
적용해보니 사용중인 우분투에서 시리얼 포트 권한을 얻을 수 있었습니다.
방법은 다음과 같습니다.
2-1. 99-serial.rules 파일을 다음처럼 편집모드로 엽니다. 여기에선 nano 편집기를 사용했습니다.
$ sudo nano /etc/udev/rules.d/99-serial.rules
2-2.파일에 다음 내용을 추가합니다:
KERNEL=="ttyACM0", MODE="0666" |
2-3. Ctrl + O를 누르고 엔터를 눌러 변경 사항을 저장하고 Ctrl + X를 눌러 nano 편집기를 종료합니다.
2-4. udev 규칙을 적용하기 위해 다음 명령을 실행합니다.
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
3. 임시 권한 변경
보안상 권장하지 않기 때문에 시리얼 포트에 대한 임시로 접근 권한을 부여할 때에만 사용하세요.
시리얼 장치의 디바이스 파일이 /dev/ttyACM0라면 다음처럼 접근 권한을 부여할 수 있습니다.
$ sudo chmod 666 /dev/ttyACM0
이 방법은 재부팅 할때마다 해줘야 합니다.
'개발 환경 > Ubuntu 설치 및 활용' 카테고리의 다른 글
Ubuntu에서 무선랜 사용 시 MAC 주소를 무작위로 변경하는 방법 (0) | 2024.06.29 |
---|---|
윈도우와 우분투 듀얼 부팅시 윈도우 시간 안 맞는 문제 해결 (0) | 2024.04.15 |
Ubuntu/Linux zip, unzip 사용방법 (0) | 2024.03.12 |
Ubuntu에서 실제 메모리(램) 크기 확인하는 방법 (0) | 2024.01.14 |
Ubuntu 22.04에 ftp 서버 설치하기( vsftpd 사용 ) (0) | 2024.01.07 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!