원래 질문

원래 질문

X 세션에 로그인한 사용자와 대화 하려고 하면 write사용자가 사용하는 터미널에 따라 결과가 달라집니다. Gnome 터미널은 s를 선택할 수 있지만 writelxterminal이나 terminator는 모두 선택할 수 없습니다. 그 이유는 lxterminal과 terminator에 연관된 pts 장치가 없기 때문입니다.

lxterminal이 실행 중일 때:

$ who
tshaw    tty7         2013-01-27 21:34

그놈 터미널이 실행 중일 때:

$ who
tshaw    tty7         2013-01-27 21:34
tshaw    pts/1        2013-01-27 22:25 (:0)

(위의 tty7 항목은 X 세션입니다)

pts 장치를 가져오도록 다른 터미널을 구성하는 방법이 있습니까, 아니면 소스 코드에서 수행해야 합니까?

답변1

원래 질문

언급된 모든 프로그램에는pts. 문제는 지정한 터미널에 pts 장치가 없어서가 아니라 정보가 기록되지 않는다는 것입니다.

lxterminal 또는 다른 터미널이 표시되지 않는 이유는 무엇입니까?who

who다음에서 정보를 검색합니다.utmp/var/run/utmp일반적으로 프로그램 자체에서 작성된 파일입니다 . 입력 프로그램을 작성하려면 utmp일반 표준 응용 프로그램(예: lxterm 또는 urxvt)에 없는 파일에 액세스할 수 있어야 합니다.

/var/run/utmp애플리케이션 액세스 허용

일반적 /var/run/utmp으로 일반 사용자는 쓸 수 없습니다. 즉, 악의적인 사용자가 파일을 덮어쓰거나 잘못된 항목을 쓸 수 있으므로 프로그램은 새 항목을 만들 수 없습니다.

내 시스템에는 /var/run/utmp다음과 같은 권한이 있습니다.

$ ls -l /var/run/utmp 
-rw-rw-r-- 1 root utmp 3072 Jan 28 08:26 /var/run/utmp

즉, 파일에 쓰려면 최소한 이 그룹에 속해야 합니다.

프로그램에 업데이트 권한을 부여하는 가장 좋은 방법은 /var/run/utmp파일을 업데이트할 수 있도록 프로그램의 권한을 변경하는 것입니다. 실행 파일의 그룹을 로 설정 utmp하고 플래그를 설정하여 setgid이를 수행 할 수 있습니다. 즉, 파일 권한에 따라 그룹 ID를 설정합니다. 즉:

chgrp utmp /usr/bin/urxvt
chmod g+s /usr/bin/urxvt

관련 정보