GUI에서 "종료"를 누르면 어떻게 됩니까?

GUI에서 "종료"를 누르면 어떻게 됩니까?

나는 오랫동안 이것에 맞서 싸워왔습니다. 이는 다음과 관련이 있습니다.이 문제. 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도움이 안 됐어요.

문제를 해결하는 가능한 방법

  • straceGUI 옵션(이것이 가능합니까?)
  • 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을 본 적이 있습니까? 이것은 대화 과정입니다. 이 프로세스는 kdeinitKDE와 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

관련 정보