데스크탑 환경이나 세션 관리자를 사용하지 않고 세션이 유휴 상태가 아니라는 것을 systemd-logind에 어떻게 알릴 수 있습니까?

데스크탑 환경이나 세션 관리자를 사용하지 않고 세션이 유휴 상태가 아니라는 것을 systemd-logind에 어떻게 알릴 수 있습니까?

logind전원 관리 용으로 사용하고 싶습니다 . 30분 동안 활동이 없으면 컴퓨터를 일시 중지하고 싶습니다.

문제는 지금 마우스와 키보드를 사용해도 30분쯤 지나면 멈춥니다. 내 거 logind.conf:

[Login]
HandlePowerKey=suspend
IdleAction=suspend
IdleActionSec=30min

Ubuntu 15.04에서는 최소한의 설정만 사용하고 있으며 그대로 유지하고 싶습니다. 콘솔에 로그인하고(세션 관리자가 필요하지 않음) 을 입력하면 startx내가 ~/.xinitrc선호하는 i3창 관리자가 시작됩니다. 데스크탑 환경을 사용하고 싶지 않습니다.

특정 시간이 지나면 컴퓨터가 멈추고 잠기도록 하고 싶습니다.

따라서 내 ~/.config/i3/config파일에는 다음이 포함됩니다.

exec "xss-lock -- i3lock -c 000000"

화면 잠금은 잘 작동하고 잘 통합되어 있습니다. 그러니 거기에는 문제가 없습니다.

관심이 있으시면:

loginctl show-seat -p IdleHint

생산하다:

IdleHint=yes

내가 먼저 나서면 '아니요'가 되어야 할 것 같죠?

내가 이렇게 하면:

gdbus call --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1/session/c1 --method org.freedesktop.login1.Session.SetIdleHint false

아니면 이거:

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1/session/c1 "org.freedesktop.login1.Session.SetIdleHint" boolean:false

IdleHint를 읽으면 여전히 "IdleHint=yes"가 출력됩니다!

그렇다면 내가 무엇을 놓치고 있는 걸까요? 세션 관리자나 데스크탑 환경을 사용하지 않고 systemd-logind활동하는 동안 정지를 방지하려면 어떻게 해야 합니까?

lxqt-powermanagement예를 들어 을 사용할 수 있다는 것을 알고 있지만 불필요하다고 생각하는 것이 옳다고 생각합니다. 물론 데스크탑 환경에 대한 개인 기본 설정을 변경할 수 있으며 필요한 경우 그렇게 할 것입니다. 그러나 이 문제는 해결 가능한 것으로 보인다.

답변1

내가 할 때

dbus-send --system --print-reply \
  --dest=org.freedesktop.login1 /org/freedesktop/login1/session/self \
  "org.freedesktop.login1.Session.SetIdleHint" boolean:false

알겠어요

Error org.freedesktop.DBus.Error.NotSupported: Idle hint control is not supported on non-graphical sessions.

이는 로그인 시 세션이 그래픽으로 간주되지 않는다는 문제가 있음을 나타냅니다. 물론:

$ loginctl show-session --property=Type self
Type=tty

이것이 sddm을 사용하는 것이 도움이 되는 이유입니다. 세션 유형을 설정합니다.

그런데 세션 유형을 수동으로 설정할 수 있나요?

org.freedesktop.login1(5)설명하다:

SetType()을 사용하면 세션 유형을 동적으로 변경할 수 있습니다. 세션의 현재 컨트롤러에서만 호출할 수 있습니다. TakeControl()이 호출되지 않은 경우 이 메서드는 실패합니다. 또한 제어가 해제되면(ReleaseControl()을 호출하거나 D-Bus 연결을 닫음) 세션 유형이 원래 값으로 재설정됩니다. 이렇게 하면 세션이 컨트롤러 충돌과 같은 일관성 없는 상태로 들어가는 것을 방지하는 데 도움이 됩니다. 유일한 매개변수 유형은 새 세션 유형입니다.

Xorg 서버세션 컨트롤러 되기그러나 설정 유형이 없으므로 세션 컨트롤러만이 이를 수행할 수 있으므로 다른 곳(xinitrc, xsession 또는 유사)에서 설정하는 것이 불가능할 수 있습니다.

하지만 이를 수행하는 다소 해킹적인 방법이 있습니다 $XDG_SESSION_TYPE.pam_systemd(8). 나는 이것을 넣어 보았습니다 :/etc/systemd/system/[email protected]/override.conf

[Service]
Environment=XDG_SESSION_TYPE=x11

이제 vt10에 로그인하고 exec startx /etc/X11/XsessionIdleHint 업데이트를 하면 xss-lock에 의해 업데이트됩니다.

더욱 강력하게 만들기 위해 내 .bash_profile은 $XDG_SESSION_TYPE세션이 기본인지 확인하고(단 하나의 세션만 해당 환경 변수를 사용자 systemd 인스턴스에 푸시해야 함) X를 시작하여 vt10을 매우 간단한 데스크탑 관리자로 전환합니다. :-)

#!bash

if [[ ! $DISPLAY && $XDG_SESSION_TYPE == "x11" ]]; then
        [[ "$(loginctl show-user --property=Display "$USER")" == "Display=$XDG_SESSION_ID" ]] && primary=: || primary=
        journal=(/usr/bin/systemd-cat --priority=info --stderr-priority=warning --level-prefix=false)
        [[ $primary ]] && session=(/etc/X11/xinit/xinitrc) || session=(~/.xsession)

        exec startx "${journal[@]}" "${session[@]}"
        exit 1
fi

. ~/.bashrc

답변2

안타깝게도 답이 없다는 것은 답이 없다는 뜻일 수도 있습니다. 하지만 틀려도 좋아요!

혹시 같은 내용을 고민하고 계시는 분들을 위해 결국 포기하고 세션관리자를 사용하고 있습니다. 구체적으로, sddm. 이제 모든 것이 잘 작동하는 것 같고 세션 관리자는 실제로 너무 부풀어 오르지 않고 거의 방해가 되지 않습니다.

관련 정보