루트 권한 없이 가상 직렬 포트를 사용하는 방법은 무엇입니까?

루트 권한 없이 가상 직렬 포트를 사용하는 방법은 무엇입니까?

배경: 사용하고 싶습니다. 이 Wi-Fi-직렬 포트 어댑터 망원경을 조종해서 Kubuntu 16.04(64비트)에서 실행됩니다.

socat다음 명령줄을 사용하여 가상 COM 포트를 만들었습니다.

$ sudo socat pty,link=/dev/virtualcom0,raw tcp:10.0.0.1:4030

여기에서 새 장치를 보았습니다.

$ ls -l /dev/virtualcom0 
lrwxrwxrwx 1 root root 10 2017-07-03 09:05 virtualcom0 -> /dev/pts/6
$ ls -l /dev/pts/6
crw--w---- 1 root tty 136, 6 2017-07-03 09:05 /dev/pts/6

예 를 들어 루트 권한으로 실행하는 한 /dev/virtualcom0작동합니다 . 하지만 표준 사용자 권한으로 포트를 사용하려고 하면 다음 오류가 발생합니다.picocommpicosomm

$ picocom /dev/virtualcom0 --baud 9600 --imap lfcrlf
FATAL: cannot open /dev/virtualcom0: Permission denied

이에 대한 특별한 udev 규칙을 정의하여 표준 사용자 권한으로 가상 COM 포트에 액세스할 수 있게 만드는 방법에 대해 알고 계시나요?

편집 #1

Deckert의 답변에서 선호하는 접근 방식에 따라 이제 다음을 사용합니다.

$ socat pty,link=/tmp/virtualcom0,raw tcp:10.0.0.1:4030

이는 macOS에서도 잘 작동합니다(homebrew를 통해 socat을 설치한 후).

답변1

socat의 매뉴얼 페이지를 훑어본 후 답을 찾았습니다.

명령줄에서 더 많은 표현식을 추가하여 pty의 속성에 패턴과 그룹을 추가할 수 있습니다. 예제를 따르되 다이얼아웃 그룹이 소유한 새 직렬 포트를 사용하고 그룹에 대한 읽기/쓰기 액세스 권한을 가지려면 다음을 수행하십시오.

$ sudo socat pty,link=/dev/virtualcom0,raw,group-late=dialout,mode=660 tcp:10.0.0.1:4030

답변2

가상 직렬 포트가 필요한 이유를 전혀 이해하지 못합니다. 방금 그렇게 하면 어떻게 될까요 telnet 10.0.0.1 4030?

socat다음은 일반 사용자 없이 실행 하고 (또는 무엇이든) sudo접근 가능한 경로를 선택하는 것입니다 ./tmp/vcom0

어떤 이유로 이것이 작동하지 않고 분명히 가능하다면 sudo소유자를 변경해 보십시오.

sudo chown your_username /dev/virtualcom0

또는 권한

sudo chmod o+rw /dev/virtualcom0

편집하다

udev특정 의사 터미널에 대한 규칙을 만들 려고 하지 마십시오 . 첫째, 어떤 의사 tty인지 미리 알 수 없으며, 둘째, 의사 tty는 모든 곳에서 사용되며 다른 사용자를 위해 이 의사 tty를 생성하면 다른 프로그램이 실패하게 됩니다.

가장 깔끔한 해결책은 변형 (1)( /tmp/vcom0)을 사용하는 것입니다.

다른 변형을 사용해야 한다면 및 socat/ 가 포함된 chmod짧은 스크립트를 만들고 chown를 사용하여 해당 스크립트를 실행하세요 sudo. 필요한 경우 를 사용하여 심볼릭 링크를 따라갈 수 있습니다 readlink.

또 다른 옵션은 생성된 링크를 socat사용하여 일반 사용자로 호출 하고 완료되면 종료 하는 짧은 스크립트를 작성하는 것입니다 . 이 스크립트를 사용하여 시작하세요 .stellariumsocatstellarium

관련 정보