tty에 640 이외의 모드를 지정하고 재부팅 후에도 지속되도록 하는 방법

tty에 640 이외의 모드를 지정하고 재부팅 후에도 지속되도록 하는 방법

내 캐리어 보드에 직렬 포트를 사용해야 하는 내장 장치(Ubuntu 16.04를 실행하는 Nvidia Jetson TX2)가 있습니다. 캐리어 보드의 직렬 포트는 기본적으로 루트가 소유하고 tty 그룹에 속하는 ttyS0에 매핑됩니다.

crw--w----  1 root tty       4,  64 Aug  1 13:34 ttyS0

ubuntu사용자를 그룹(내가 로그인한 그룹)에 추가했지만 tty기본적으로 그룹에는 ttyS0에 대한 읽기 권한이 없습니다.

sudo chmod g+r /dev/ttyS0수정했지만 재부팅 후에도 문제가 지속되지 않습니다. 다양한 udev 규칙(99-z_setup.rules)을 만들어 보았습니다.

KERNEL=="ttyS0", NAME="ttyS0", SYMLINK+="my_tty", GROUP:="tty", MODE:="0660", OWNER:="ubuntu"

또는

KERNEL=="ttyS0", NAME="ttyS0", SYMLINK+="my_tty", GROUP:="tty", MODE:="0660"

또는

KERNEL=="ttyS0", NAME="ttyS0", SYMLINK+="my_tty", GROUP="tty", MODE="0660"

이러한 결과는 다음과 같습니다.

lrwxrwxrwx  1 root root           5 Aug  1 13:34 my_tty -> ttyS0
crw--w----  1 root tty       4,  64 Aug  1 13:34 ttyS0

그래서 아직도 접근이 안 되고 있어요. 나도 시도했다

KERNEL=="ttyS0", ACTION=="add", PROGRAM="/usr/bin/sudo /home/ubuntu/bin/setup_tty.sh"

setup_tty.sh포함 하여

#!/bin/bash

chmod g+r /dev/ttyS0
echo "setup_tty ran" >> /home/ubuntu/bin/tty.log

파일에 에코되므로 tty.log스크립트가 실행되었음을 알지만 권한은 여전히 ​​​​있습니다.

crw--w----  1 root tty       4,  64 Aug  1 13:44 ttyS0

그룹/소유자/모드 설정이 무시되거나 재정의되는 것과 같습니다. 검색했는데 비슷한 질문이 많이 있지만 그 대답은 항상 사용자를 그룹 tty또는 에 추가하는 것 같습니다 dialout. 내 사용자 계정은 이미 두 그룹의 구성원이지만 어떤 이유로 기본적으로 이 그룹에는 주사위가 없습니다. 읽기 권한.

/etc/login.defs를 확인하고 다음 줄을 찾았습니다.

#       TTYPERM         Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620.  Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
# In Debian /usr/bin/bsd-write or similar programs are setgid tty
# However, the default and recommended value for TTYPERM is still 0600
# to not allow anyone to write to anyone else console or terminal

# Users can still allow other people to write them by issuing
# the "mesg y" command.

TTYGROUP        tty
TTYPERM         0600

TTYPERM 값을 0660으로 변경하고 재부팅했는데 별 차이가 없었습니다.

재부팅 후 이 tty를 640 이외의 모드로 만드는 방법에 대한 아이디어가 있습니까?

이것이 답일 수 있습니다. 실행하여 journalctl | grep tty다음 출력을 찾았습니다.

Aug 02 11:05:45 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: [email protected]: Start request repeated too quickly.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Failed to start Serial Getty on ttyS0.

따라서 다른 서비스(Getty가 무엇인지 확실하지 않음)가 ttyS0을 사용하려고 하는 것 같습니다.

답변1

로그인을 사용하는 경우 /etc/login.defs항목을 확인하세요 TTYPERM.

일반 디버깅 조언: 스크립트 시작 부분에서 이를 사용하여 명령의 오류 출력을 캡처하고 장치 항목이 이미 존재하는지 확인해야 합니다.

exec >> /home/ubuntu/bin/tty.log 2>&1

답변2

그래서 제 경우에는 ttyS0이 TX2의 직렬 콘솔이라는 것이 밝혀졌습니다. 따라서 제가 원하는 방식으로 사용하려고 하면 그만한 가치보다 더 고통스러울 것입니다. ttyTHS2도 사용 가능하며 이미 필요한 권한이 있는 것으로 보입니다. 이는 특별히 만족스러운 답변은 아니지만 앞으로 나아갈 수 있는 최선의 방법입니다.

관련 정보