xterm이 /dev/ptmx 파일을 열지 못하는 이유는 무엇입니까?

xterm이 /dev/ptmx 파일을 열지 못하는 이유는 무엇입니까?

gnome-terminal/dev/ptmx파일을 엽니다 :

여기에 이미지 설명을 입력하세요.

하지만 xterm열리지 않습니다.

여기에 이미지 설명을 입력하세요.

모든 터미널 에뮬레이터가 이 파일을 열어야 한다고 생각하는데 /dev/ptmx왜 xterm은 이 파일을 열지 않습니까?


편집하다:이것은 ls -ld "$(command -v xterm)"(에 대한 응답으로 스티븐 차제라스):

여기에 이미지 설명을 입력하세요.

답변1

Xterm은 이미 /dev/ptmx열려있지만 이렇게는 볼 수 없습니다. 이유는 다음과 같습니다.

실행 xterm권한에는 S_ISGID(set-group-ID) 비트가 설정되어 있으며 그룹이 소유합니다 utmp.

이 방식은 항목을 및 (정확한 경로는 시스템에 따라 다를 수 있음) xterm에 추가하여 세션이 또는 의 출력 에 표시되도록 설정됩니다 ./var/run/utmp/var/log/wtmpwholast

이러한 권한을 사용하면 xterm실행될 때 이를 실행하는 프로세스에서 해당 권한을 볼 수 있습니다.효과적인utmp그룹 ID는 그룹의 ID 로 변경됩니다 (또한읽다그룹 ID는 변경되지 않고 그대로 유지됩니다. 그러면 utmp쓰기 모드에서 레코드를 열고 로그인할 수 있는 권한이 부여됩니다.wtmp

Linux에서는 보안 조치로 root유효 사용자 ID가 실제 사용자 ID와 다르거나 유효 그룹 ID가 실제 그룹 ID와 다른 프로세스에 대해 열린 파일만 나열될 수 있습니다. (이러한 프로세스에는 다른 프로세스에 비해 권한이 있음을 알 수 있습니다 /proc/<pid>fd.)dr-x------ root rootdr-x------ you your-group

그렇기 때문에 lsof일반 사용자로 실행할 때 xterm프로세스의 열린 파일을 나열할 수 없습니다. lsof으로 실행해야 합니다 root.

작동하는 이유에 대해서는 gnome-terminals몇 가지 가능성이 있습니다.

  • gnome-terminal로그인 기록에 항목을 추가하지 않습니다(내 시스템의 경우입니다).
  • gnome-terminal사용utempter 돕는 사람(이 경우 sgid utmp) 로그인 기록을 추가합니다. 이것이 제가 시스템에서 xterm하려는 작업 입니다 konsole.
  • gnome-terminalutmp로그인 기록을 업데이트한 후( xterm수행되지 않음) 유효 사용자 ID를 실제 사용자 ID로 재설정합니다(특수 접근 권한을 일시적으로 포기함).

답변2

이것은 의사 터미널 마스터 장치입니다.리눅스. 그러나 xterm은 POSIX 기능을 사용하여 의사 터미널을 열고 장치 열기에 대한 세부 정보를 숨깁니다.

의사 터미널은 구성이 다르지만 시스템에서는 다음을 사용할 수 있습니다.이 작품:

#elif defined(HAVE_POSIX_OPENPT) && defined(HAVE_PTSNAME) && defined(HAVE_GRANTPT_PTY_ISATTY)
    if ((*pty = posix_openpt(O_RDWR)) >= 0) {
    char *name = ptsname(*pty);
    if (name != 0) {
        strcpy(ttydev, name);
        result = 0;
    }
}

VTE(실제 터미널 에뮬레이터: "gnome-terminal"은앞쪽) 다음과 같은 것을 사용하여 (참조src/pty.cc).

실제로는 계속할 필요가 없습니다.사용기본 장치의 파일 설명자입니다. xterm은 두 개의 프로세스로 실행되며사용이 파일 설명자는 "상위" 프로세스에 있습니다. 기본 장치의 파일 설명자를 삭제합니다."자식" 프로세스(소스 참조).

xterm을 실행하면,하위 프로세스예를 들어 다음을 실행하는 경우 쉘이 대화하는 것입니다.tty어떤 터미널을 사용하고 있는지 확인하세요(예:노예의사 터미널의 한쪽주인각 프로세스는 의사 터미널의 한쪽 면만 사용해야 하기 때문에 쪽이 닫혀 있습니다.

이것상위 프로세스(열림 /dev/ptmx) X 윈도우 표시를 관리합니다.

lsof이 모든 것을 염두에 두고 show xterm이 열리는 것을 보고 싶습니다 /dev/ptmx. 와는 별개로:

  • 스크린샷의 메시지는 현재 실행 중이 아니라는 것을 의미합니다.뿌리, 모든 프로세스를 볼 수 없도록 하는 권한 문제가 있는 경우 lsof이는 정보 손실의 원인일 수 있습니다.
  • xterm은 실제로 실행 중인 시스템에서 실행되고 있지 않습니다 . 예를 들어 해당 시스템에 ssh로 접속한 경우(그리고 우연히 다른 세션에서 실행되는 것을 lsof보게 된 경우 )gnome-terminal

관련 정보