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


15

나는 꽤 오랫동안 이것에 대해 내 머리를 두드리고있다. 이 질문 과 관련 있습니다. GUI에서 Linux 상자를 종료 할 때 어떤 일이 발생하는지 정확히 알고 싶습니다. 이것은 문서화가 잘되어 있지 않은 것 같습니다.

이상적으로는 DE 및 OS에 구애받지 않는 대답을 원합니다. 그 외에도 Mandriva 2010.1 및 Debian 6.x (Squeeze) 및 7.0 (Wheezy)의 모든 경우에 Gnome을 실행하는 데 관심이 있습니다. (주의를 기울이면 그놈 2와 그놈 3입니다.)

기본적으로 "Shut Down"또는 "Restart"를 누르면 스크립트의 명령 / 스크립트 / 시퀀스가 ​​시작되어 동작을 수정할 수 있습니다. 내가 살펴본 일부 포럼 게시물은 해킹을 제안 /etc/polkit-1/*하지만이 디렉토리 구조는 예를 들어 Debian (Squeeze) 상자의 골격 일뿐입니다.

누구든지 도울 수 있습니까?


편집하다

내가 지금까지 시도한 것

  • shutdown실행 파일을 내 스크립트 로 대체했습니다 . 작동하지 않습니다. shutdownGnome을 누르면 스크립트를 실행하지 않고 로그 아웃합니다.
  • Gnome 2 메뉴 편집을 시도했습니다. 기쁨 없음 : "종료", "로그 아웃"및 "화면 잠금"옵션이 메뉴 편집기에 나타나지 않습니다.
  • 를 보았는데 /usr/share/menu도움이되지 않았습니다.

솔루션의 가능한 방법

  • straceGUI 옵션을 사용하면 가능합니까?
  • shutdown의 소스 코드를 보면
  • gnome-session의 소스 코드를 보면

최신 정보

아래 답변에 대한 내 의견에 따라 메시지 아래의 polkit작업 을 살펴보고 /usr/share/polkit-1/actions/(파일에서 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에서 "종료"또는 "전원 끄기"를 선택한 경우이를 트리거하는 메커니즘이 트리거되어야합니다.

누구나 확인 / 반환 할 수 있습니까? 어떻게하면이 신호를 가로 채거나 수정할 가능성이 있습니까?


무엇을 이루려고 노력하고 있습니까? 중지 될 때 스크립트/etc/init.d/rc.local호출하도록 편집 을 추가 할 수 있습니다 .
depquid

@depquid 내가 성취하려고하는 것은 내가 링크 한 이전 질문에 있습니다. 로컬로 로그인 한 사용자가 다른 사용자의 SSH 세션을 방해하지 않도록 노력하고 있습니다.
Joseph R.

답변:


9

디스플레이 관리자에 따라 다릅니다! (예 : KDM, GDM)

DM이 루트로 실행된다는 것을 명심하십시오! (로그인 한 사용자로 세션 프로세스를 실행하려면 루트 권한이 필요합니다)

KDE 또는 GNOME에서 종료를 클릭하면 DE가 세션 종료 후 전원을 끄거나 다시 시작하라는 신호를 DM에 보냅니다. 그런 다음 DE는 모든 프로그램에 종료를 알리고 다른 모든 프로세스가 종료 (또는 시간 초과)되면 DE의 마지막 프로세스 인 세션 프로세스가 종료됩니다.

세션 프로세스는 X11 세션에서 시작된 첫 번째 프로세스입니다. 종료되거나 종료되면 세션이 종료됩니다. DE없이 X를 실행할 때 xterm을 본 적이 있습니까? 그것은 세션 과정입니다. 이 프로세스는 kdeinitKDE와 gnome-session그놈에서 호출 됩니다 .

세션이 종료되면 제어는 DM으로 돌아가고 (X 프로세스가 종료되기를 기다리고 있음) DE가 그에게 지시 한 내용을 확인합니다. 전원을 끄거나 다시 시작하라는 메시지가 표시되면 그렇게합니다. 다른 경우에는 X에서 새 로그인 화면을 시작합니다.

이것은 또한 일부 DM과 함께 사용될 때 일부 DE가 전원을 끄거나 다시 시작할 수없고 로그 아웃하기 위해 과거에 겪었을 수도있는 문제와 관련이 있습니다.

어쨌든, 이것은 그렇게 나쁜 문서화되지 않았습니다. GDM에는 이전에 말한 것처럼 종료하도록 지시 할 수있는 명령 의 매뉴얼 페이지 가 있습니다 ( gdm-control). KDM도 훌륭한 문서화 를 가지고 있으며 유사한 (좀 더 복잡한) 유틸리티가 kdmctl있습니다.


PolicyKit없이 종료 및 재시작이 가능하지만 PolicyKit은 컴퓨터를 루트, 일시 중지 또는 최대 절전 모드로 전환하지 않고 디스크 마운트와 같은 오늘날의 시스템에 필요한 많은 용도로 사용됩니다. 그리고 그것은 나쁜 문서화되지 않았습니다!

PolicyKit이 무엇이고 어떻게 작동하는지에 대해 더 알고 싶다면 이것을 확인하십시오 : http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html


유망한 소리. 문서로 연결되는 링크에 감사드립니다. 의심 할 여지없이이 매뉴얼은 포괄적이고 명확하지만 존재하지 않았을 수도 있습니다. 귀하의 답변은이 문제와 관련하여 언급 된 디스플레이 관리자를 처음 본 것이기 때문에 일반적인 지식은 아닙니다. 나는 이것을 시도하고 당신에게 알려줄 것이다 ...
Joseph R.

확인. gdm-control도움이되지 않았습니다. PolicyKit에 제공 한 문서가 더 유망한 것 같습니다. 이것에 대해 자세히 살펴보고 사용자 지정 규칙을 구현할 수 있는지 확인하겠습니다. 계속하려면 ...
Joseph R.

1
나는 약간의 독서 (스키밍, 더 좋아함)를하고 틀린 경우 나를 수정하십시오 : 종료 요청시 DE는 D-BUS의 폴킷을 통해 DM에 메시지를 보냅니다. 인증 대기 중, 세션이 종료되거나 요청이 취소 될 수 있습니다. 이는 polkit호출 org.freedesktop.consolekit.system.stop-multiple-users된 조치에 정의되어 있습니다. /usr/share/polkit-1/actions비활성 사용자 및 auth_admin_keep활성 사용자 에 대한 요청을 철회하도록 설정되어 있습니다. 문제는이 행동을 정의하는 것입니다. 정확히 무엇을 실행합니까?
Joseph R.

@don_crissti 이제는 이해합니다. 내가 관심있는 것은 바로이 "신호"입니다. 그것을 보내는 클라이언트는 무엇입니까?
Joseph R.

@don_crissti이 의견을 후속 질문 으로 다른 질문 으로 옮기 시겠습니까?
Joseph R.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.