나는 오랫동안 이것에 맞서 싸워왔습니다. 이는 다음과 관련이 있습니다.이 문제. GUI에서 Linux 상자를 종료하기로 선택하면 정확히 무슨 일이 일어나는지 알고 싶습니다. 이것은 잘 문서화되어 있지 않은 것 같습니다.
이상적으로는 DE 및 OS에 구애받지 않는 답변을 원합니다. 그 외에도 나는 Gnome을 실행하는 Mandriva 2010.1과 Debian 6.x(Squeeze) 및 7.0(Wheezy)의 세부 사항에 관심이 있습니다. (자세히 살펴보면 네, Gnome 2와 Gnome 3입니다)
기본적으로 "닫기" 또는 "다시 시작"을 누를 때 스크립트의 어떤 명령/스크립트/시퀀스가 실행되어 해당 동작을 수정할 수 있는지 알고 싶습니다. 내가 본 일부 포럼 게시물에서는 해킹을 제안했지만 /etc/polkit-1/*
이 디렉토리 구조는 내 데비안(Squeeze) 상자의 뼈대일 뿐입니다.
누구든지 도와줄 수 있나요?
편집하다
내가 지금까지 시도한 것
shutdown
실행 파일을 내 스크립트로 대체했습니다. 이것은 작동하지 않습니다. Gnome을 누르면shutdown
스크립트를 실행하지 않고 로그아웃됩니다.- Gnome 2 메뉴를 편집해 보세요. 불만족스럽습니다: "종료", "로그오프" 및 "잠금 화면" 옵션이 메뉴 편집기에 표시되지 않습니다.
- 찾아봤는데
/usr/share/menu
도움이 안 됐어요.
문제를 해결하는 가능한 방법
strace
GUI 옵션(이것이 가능합니까?)shutdown
소스 코드 보기gnome-session
소스 코드 보기
고쳐 쓰다
아래 답변에 대한 내 의견을 바탕으로 polkit
아래 작업을 조사한 /usr/share/polkit-1/actions/
결과 파일에서 throw message라는 작업을 org.freedesktop.consolekit.policy
발견 했습니다.org.freedesktop.consolekit.system.stop-multiple-users
System policy prevents stopping the system when other users are logged in
나는 (명명 규칙으로 인해 org.freedesktop.*
) 이것이 D-BUS를 통해 DM으로 전송되는 일종의 신호라고 생각합니다. 또한 이 메시지는 다른 사용자가 로그인하여 그래픽 방식으로 종료를 시도할 때 발생하므로 메시지를 트리거하는 메커니즘은 GUI에서 종료 또는 전원 끄기를 선택할 때와 동일해야 합니다.
누구든지 이것을 확인/반박할 수 있습니까? 어떤 방식으로든 이 신호를 가로채거나 수정할 수 있습니까?
답변1
디스플레이 관리자에 따라 다릅니다! (예: KDM, GDM)
귀하의 DM이 루트로 실행되고 있음을 기억하십시오! (로그인한 사용자로 세션을 실행하려면 루트 권한이 필요합니다)
KDE 또는 GNOME에서 종료를 클릭하면 DE는 세션이 종료된 후 종료하거나 다시 시작하라는 신호를 DM에 보냅니다. 그런 다음 DE는 각 프로그램에 종료를 알리고, 다른 모든 프로세스가 종료(또는 시간 초과)되면 DE의 마지막 프로세스(예: 세션 프로세스)가 종료됩니다.
세션 프로세스는 X11 세션에서 시작되는 첫 번째 프로세스입니다. 세션이 종료되거나 종료되면 세션이 종료됩니다. DE 없이 X를 실행할 때 xterm을 본 적이 있습니까? 이것은 대화 과정입니다. 이 프로세스는 kdeinit
KDE와 GNOME에서 호출됩니다 gnome-session
.
세션이 종료되면 제어권이 DM(X 프로세스가 끝나기를 기다리고 있음)에게 반환되고 DE가 지시한 내용을 확인합니다. 전원을 끄거나 재부팅하라는 메시지가 표시되면 그렇게 됩니다. 그렇지 않으면 X에서 새 로그인 화면이 시작됩니다.
이는 과거에 다른 DM과 결합된 일부 DE를 종료하거나 다시 시작할 수 없고 로그아웃만 가능했던 문제와도 관련이 있습니다.
어쨌든 그렇게 나쁜 기록은 아니다. GDM에는 "gdm-control(1)" 명령에 대한 매뉴얼 페이지가 있는데, 이를 통해 이전에 말씀드린 것처럼 종료하도록 지시할 수 있습니다( gdm-control
). KDM은훌륭한 문서화이라는 유사한(약간 더 복잡한) 유틸리티도 있습니다 kdmctl
.
PolicyKit 없이도 종료하고 다시 시작할 수 있지만 PolicyKit은 컴퓨터를 루팅하지 않고 디스크를 마운트하거나 일시 중지하거나 최대 절전 모드로 전환하는 등 오늘날의 시스템에 필요한 다양한 목적을 수행할 수 있습니다. 그리고 그것은 나쁜 기록도 아닙니다!
PolicyKit이 무엇인지, 어떻게 작동하는지 자세히 알아보려면 다음을 확인하세요.http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html