X 세션에 로그인한 사용자와 대화 하려고 하면 write
사용자가 사용하는 터미널에 따라 결과가 달라집니다. Gnome 터미널은 s를 선택할 수 있지만 write
lxterminal이나 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