Arduino 프로그램은 루트로 실행될 때만 작동합니다


19

간단한 스케치를 업로드하면 Arduino 프로그램을 루트 ( sudo) 로 실행할 때 작동하는 것 같습니다 . 일반 사용자로 실행하고 싶습니다. 누구든지 전에 같은 문제에 직면하여 해결 했습니까?

내가 얻은 것입니다 lsusb:

$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

그리고 Arduino 프로그램은이를로 식별합니다 /dev/ttyACM0. 권한은 다음과 같습니다.

$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

출력은 다음과 같습니다. id

groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

예제에서 스케치를 일반 사용자로 업로드하면이 오류가 발생합니다.

avrdude:stk500_recv(): programmer not responding

어떤 제안이라도 환영합니다.


이 정보가 도움 되는지 확인하십시오 . 섹션 "SET THE PERMISSION"
alexan_e

4
IDE를 루트로 실행하는 상황을 받아들이지 않고 문제를 올바르게 해결하는 방법을 찾으려고 +1했습니다.
jippie

권한이없는 사용자로 IDE를 실행하려고 할 때 발생하는 정확한 오류는 무엇입니까? Preferences메뉴 에서 상세 출력을 활성화해야 할 수도 있습니다.
jippie

플러그를 뽑아 올바른 장치에 연결했는지 확인한 다음 몇 초 동안 기다렸다가 다시 연결 한 다음 dmesg등록 된 장치 파일 의 출력을 확인하십시오 .
jippie

장치가로 올바르게 검색되었는지 확인하십시오 /dev/ttyACM0: USB ACM device. 따라서 나에게는 문제가되지 않습니다. 반면, 컴파일 및 업로드 로그 (환경 설정에서 활성화해야 함)는 유망한 것으로 보입니다. 난 그냥 아두 이노 프로그램 :(에서 복사 할 수없는 것 (그들이 파일 어딘가로 작성 할 수있다?).
feverDream

답변:


13

가장 쉬운 해결책은 자신을 dialout그룹 에 추가하는 것 입니다.

먼저의 출력을 기록하십시오 id. 파일로 저장하십시오 ( /tmp재부팅시 정리 되지 않음 ). 출력을 보면 사용자가 여러 그룹에 등록되어 있고 해당 그룹이 시스템에 대한 추가 권한을 나타냅니다. 기본적으로 Arduino는 dialout직렬 인터페이스로 등록되기 때문에 그룹에 할당되어 있으며, 예전에는 모뎀을 사용하여 전화 걸기 위해 자주 사용되었습니다.

dialout그룹 에 자신을 추가하려면 다음 명령을 실행하십시오.

sudo usermod -a -G dialout $USER

-a플래그를 잊지 말고 (바꾸기보다는 그룹을 추가하는 경우) 완전히 다른 문제가 발생합니다. 이것이 id출력을 파일 로 복사하는 이유입니다 . 따라서 엉망인 경우 최소한 사용자가 이전에 구성한 내용을 알고 있어야합니다.

그런 다음 로그 아웃하고 로그인하면 해당 시점부터 작동합니다.

선택적으로 id이전에 저장 한 출력과 비교하여 출력을 다시 확인할 수 있습니다 .


신중한 답변을 주신 @jippie에게 감사드립니다. 나는 dialout그룹 에 자신을 추가 했지만 문제는 여전히 지속되는 것 같습니다. id명령 의 출력으로 질문을 수정했습니다 .
feverDream

귀하의 업데이트에 대한 인상은 문제의 정확한 원인이 다음 문제로 옮겨 졌다는 것입니다. 당신은 그것을 해결하기 위해 가고 있습니다. 당신은 어떻게됩니까 cat /dev/ttyACM0? 오류가 발생합니까?
jippie

아니요, 장치 파일이 비어있는 것처럼 보입니다 cat.
feverDream

오류 메시지가 표시되지 않는 한 비어 있습니다.
jippie

9

자주 반복되는 조언은 " sudo usermod -aG dialout <username>저는 결코 효과 가 없었습니다. 마침내 그 이유를 알아 냈습니다. 내 컴퓨터 /dev/ttyUSB0에서 그룹 serial에 속하지 않고 dialout내 사용자 이름을 추가하여 dialout아무 것도하지 않았습니다.

# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

마지막으로 : sudo usermod -aG <group-name> <username>나를 위해 수정했습니다.

당혹스럽게, 이것은 "SET THE PERMISSION"에 명시 적으로 언급되어 있습니다 . 한숨.


예, 실제 소유 그룹을 확인하는 것이 좋습니다. 또한 장치 파일은 보드 유형, 커널 드라이버 및 궁극적으로 udev 구성 또는 노드 생성에 따라 ttyUSB # 또는 ttyACM # (또는 이론적으로 무엇이든) 일 수 있습니다.
Chris Stratton


0

이것은 나에게 일어난다. 필자의 경우 arduino 버전을 업그레이드했으며 환경 설정 파일이 문제를 일으키는 것으로 보입니다. ~ / .arduino / preferences.txt 파일을 삭제하십시오 (Arduino IDE가 닫힌 상태).

단계 :

  1. Arduino IDE 닫기
  2. 이것을 실행하십시오 :

    rm ~ / .arduino / preferences.txt

  3. Arduino IDE 시작

이것은 나를 위해 일했습니다. 다른 사람에게도 효과가 있기를 바랍니다. Linux Mint 17을 사용하고 Arduino IDE를 추출하여 Arduino 1.05에서 Arduino 1.06으로 업그레이드했습니다. 리포지토리에서 사용하지 않습니다. (물론 다른 사용자가 언급 한대로 해당 그룹에 사용자를 추가 한 후에도 도움이되지 않으면)


이와 관련하여 루트로 도구를 실행하면 부작용으로 인해 ordinay 계정이 수정하거나 정리할 수없는 임시 파일, 구성 파일 또는 프로젝트 파일을 남길 수 있습니다.
Chris Stratton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.