직렬 포트 터미널> / dev / ttyS0을 열 수 없음 : 권한이 거부되었습니다


19

이 상자에 Windows XP가 있는데 실패했습니다. OS가 손상되었다고 생각하여 다시 설치하려고 시도했지만 실패했습니다. 그러나 우분투를 설치하려고했는데 USB 또는 HD에서 실행할 수 없었습니다.

DID의 MEM 테스트 (2했다) 실패와 내 512 메가 바이트 스틱 중 하나를 발견했다. 나는 나쁜 것을 제거하고 우분투를 설치할 수 있었지만 느 렸습니다.

허리케인 샌디에 대한 패킷 라디오를 빠르게 설정하려고했습니다. 직렬 포트 터미널을 다운로드하여 사용할 수 있었지만 시스템은 계속 잠금 상태였습니다. 그래서 옆에 Xubuntu를 설치하고 다음 날에 RAM을 확보 할 계획입니다. Xubuntu를 켜면 직렬 포트 터미널에 다음과 같은 오류가 발생합니다.

Cannot open /dev/ttyS0: Permission denied

kpc3 패킷 터미널을 사용하고 컴퓨터 뒷면의 com 포트에 연결할 수 있도록 직렬 포트 터미널 또는 Xubuntu와 동등한 기능을 사용하고 싶습니다.

어떤 아이디어?

답변:


39

tty 장치는 "dialout"그룹에 속해 있으므로이 그룹의 구성원이 아니므로 / dev / ttyS0에 대한 액세스가 거부 된 것이므로 해당 그룹에 사용자를 추가해야합니다.

먼저 해당 그룹의 구성원인지 확인하십시오.

groups ${USER}

.. 내가 속한 모든 그룹이 나열됩니다. 전화 걸기 그룹에 속하지 않으면 다음과 같이 자신을 추가하십시오.

sudo gpasswd --add ${USER} dialout

그런 다음 적용하려면 로그 아웃했다가 다시 로그인해야합니다. 그런 다음 문제가 해결되는지 확인하십시오.


ID가 1000 인 전화 걸기 그룹 사용자 인 경우에도 읽을 직렬 포트를 열 수 없습니다. 재부팅 후. 그러나 동일한 실행 파일에 sudo를 사용하면 열 수 있습니다 /dev/ttyS0. 가능한 이유는 무엇입니까?
Tomilov Anatoliy

2
@Orient 나는 같은 문제가 있었고 그룹 dialout이 정의되지 않았기 때문 입니다. 실행 newgrp dialout하면 문제가 해결되었습니다.
TheGr8_Nik

@ TheGr8_Nik 감사합니다. 귀하의 솔루션은 Ubuntu 16.04에서 작동했습니다. 재부팅이 필요하지 않습니다. 기본적으로이 시스템에는 그룹 이름이 없습니다 dialout. groups명령을 통해 확인했습니다 . dialout명령을 통해 그룹에 사용자 이름을 추가 한 후에도 sudo usermod -a username -G dialout. 를 사용한 후이 newgrp dialout명령이 esptool.py -p /dev/ttyUSB0 flash_id작동했습니다.
썬 베어

11

나에게 맞는 유일한 해결책은 다음과 같습니다. (컴퓨터를 부팅 할 때마다)

sudo chmod 666 /dev/ttys0

설치시 실제로 수정해야합니다. 나는 15.10에 있고 16.04 LTS를 시도했지만 여전히 동일합니다. 그런 간단한 수정처럼 보입니다.

이전 버전 10.04LTS에는이 문제가 없었습니다.


2
이것은 raspberry pi 3에서 작동하지만 재부팅 할 때 권한을 잃었습니다.
J261

1
전화 접속을 위해 내 사용자 이름에 권한을 추가하면 간단하고 간단하게 수정되었습니다.
DRJ101

6

이 명령을 사용할 수 있습니다.

sudo adduser $USER dialout

현재 사용자가 전화 걸기 그룹에 추가됩니다. 로그인하여 로그 아웃하십시오.


4

우분투 18.04에서 다음 명령 으로이 문제를 해결했습니다.

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

그런 다음 재부팅하십시오.

여전히 문제가있는 경우 다음을 사용하여 디버그하십시오.

strace -ff <COMMAND> > strace.txt 2>&1

그리고 strace에서 "거부 됨"을 찾으십시오.


3

다양한 포럼을 둘러 보았으며 권한과 관련된 버그 인 것 같습니다. 다음은 문제를 해결하는 방법입니다 (긴 버전). 당신이 필요합니다 BOTH cusetserial패키지가 설치되어 있어야합니다.

세 개의 터미널 탭에서 모니터 된 출력에서 ​​출력 # tail -f /var/log/messages 여부를 알 수 있습니다 /dev/ttyUSB0.

두 번째 탭 ls -l에서이 장치에 대한 루프를 실행하여 장치의 권한과 그룹 ID가 '전화 걸기'인지 확인하십시오. 이것은 중요한 비트입니다. 어떤 이유로 든 사용자는 반드시이 GID를 사용하여을 수행해야합니다 cu.

세 번째 탭에서 루트로서 # newgrp dialout(전화 걸기의 GID에 해당) 수행했습니다. # touch /tmp/anything...로 테스트 ls -l한 결과이 파일은 전화 걸기 그룹과 함께 루트에 의해 생성되었음을 보여줍니다. 우리는 준비가되었습니다 ... # cu -l /dev/ttyUSB0 제 경우에는 예상 프롬프트를 보려면 다시 Return 키를 눌러야했습니다. 다른 경우에는 속도가 필요할 수 있습니다 지정해야합니다.


이것은 나에게 도움이되는 실제 조각이었습니다 : 어떤 이유로, 사용자는 반드시이 GID를 사용하여 cu를 수행해야합니다 . 대단히 감사합니다.
ΤΖΩΤΖΙΟΥ

1

해결책은 다음과 같습니다.

방금 운영 체제를 Ubuntu 18로 업데이트했습니다. 일반적으로 Ubuntu Software 포털을 통해 제공되는 것이 항상 이전 버전이므로 최신 기능과 보드 지원이 필요했기 때문에 Arduino 웹 사이트를 통해 arduino IDE를 설치합니다. 그러나 최신 운영 체제를 방금 설치했기 때문에 우분투의 공식 소프트웨어 센터에 최신 버전의 IDE가 나열되어 있다고 생각했습니다.

이제 수분이 많은 부분으로! 랩탑과 데스크탑 모두 직렬 포트에 액세스하는 데 동일한 문제가있었습니다. 전화 접속 그룹의 사용자를 만들고 직렬 포트에 대한 권한을 설정했지만 항상 로그 아웃했다가 다시 로그인해야했습니다. 재부팅 할 때마다 다시 수행해야합니다. 재미 없어!.

이번에는 작동하지 않았습니다. 소프트웨어 센터에서도 소프트웨어의 권한 옵션에 직렬 포트 "연결 끊김"이 표시됩니다. sudo를 사용하여 터미널 창을 통해 모든 권한을 수동으로 부여한 후에도 포트에 대한 권한을 허용하는 옵션이 없습니다.

소프트웨어 센터에서 Arduino IDE를 제거하고 웹 사이트에서 설치하기로 결정했습니다. 이번에는 설치 파일을 읽었습니다. 직렬 포트에 대한 권한이 있는지 여부를 확인하기 위해 ***** 물론 그렇습니다! ****** 모든 포트는 전체 액세스 권한, 보드를 통한 사용자 액세스로 설정됩니다. 이것이 답이었습니다. arduino가 제공 한 arduino-linux-setup.sh 파일을 실행 한 후 모든 직렬 포트 문제가 해결되었습니다. 다음은 arduino-linux-setup.sh파일 에서 발췌 한 것입니다 .

echo ""
echo "******* Add User to dialout,tty, uucp, plugdev groups *******"
echo ""

sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1


acmrules () {

    echo ""
    echo "# Setting serial port rules"
    echo ""

    cat <<EOF
    "KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   "KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   EOF

}

커널도 영향을받습니다. 나의 제안:

arduino IDE 웹 사이트에서 설치하십시오. 지금 복구 할 때까지 소프트웨어 센터를 무시하십시오. 예. SOFTWARE CENTER는 설치 중 그리고 이후에도 직렬 포트에 대한 권한을 허용하지 않습니다.

문제 해결됨!


0

내 경우에는 다음을 사용하여 사용자를 그룹에 추가해도 문제가 계속 발생합니다.

그래서 내가 사용할 때 :

sudo gpasswd --add ${USER} dialout

그리고 내가 입력 할 때 : groups나는이 결과를 얻었다 :

ilyahoo adm cdrom sudo dip plugdev lpadmin sambashare

그러나 입력을 입력 id -Gn ilyahoo하면 다음과 같습니다.

ilyahoo adm tty dialout cdrom sudo dip plugdev lpadmin sambashare 

나는 그것이 무엇인지 정직하게 모르는 문제가 있다는 것을 알고 있습니다.

방금 입력 한 솔루션을 얻으려면

newgrp ilyahoo

문제가 해결되었습니다.


askubuntu에 ilyahoo를 환영합니다! 가이드 라인에 따라 게시물 형식을 지정하십시오. 보다 읽기 쉬운 방식으로 출력을 형식화하십시오. 감사합니다
abu_bua

1
@abu_bua 인용 형식이 아닌 명령 출력에 코드 형식을 사용하십시오.
muru

0

대답은 간단합니다. USB 포트에 액세스하려면 두 그룹에 사용자를 추가해야합니다. 이 그룹은 dialouttty 같습니다.

sudo usermod -a -G dialout <user>
sudo usermod -a -G tty <user>

교체 <user>해당 명령의 실제 사용자 이름.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.