배경: 사용하고 싶습니다. 이 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
작동합니다 . 하지만 표준 사용자 권한으로 포트를 사용하려고 하면 다음 오류가 발생합니다.picocomm
picosomm
$ 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
사용하여 일반 사용자로 호출 하고 완료되면 종료 하는 짧은 스크립트를 작성하는 것입니다 . 이 스크립트를 사용하여 시작하세요 .stellarium
socat
stellarium