S3 절전(일시 중지) 또는 S4 절전(최대 절전)에서 깨어난 후 X 프로그램을 자동으로 실행하는 방법은 무엇입니까?

S3 절전(일시 중지) 또는 S4 절전(최대 절전)에서 깨어난 후 X 프로그램을 자동으로 실행하는 방법은 무엇입니까?

기존 문제systemd가 깨어난 후 사용자 스크립트를 실행하는 방법은 무엇입니까?잠에서 깨어난 후 스크립트를 실행할 수 있는 답변이 이미 있습니다. 그러나 이 문제에 대해 제공되는 솔루션에는 사용자를 위한 하드 코딩이 필요합니다.

현재 기록된 모든 그래픽 데스크탑 세션에서 자동으로 실행되는 스크립트를 생성하려면 어떻게 해야 합니까?(즉, 빠른 사용자 전환/"계정 전환"을 사용하여 여러 가상 터미널에서 여러 데스크톱을 병렬로 실행할 때 올바른 환경 변수 값을 사용하고 각 사용자에 대해 스크립트를 실행해야 합니다 DISPLAY. XAUTHORITY)

나는 개인적으로 이것을 사용하여 lightdm새 세션을 생성하거나 기존 세션에 다시 로그인하지만 디스플레이 관리자 독립 솔루션을 선호합니다.

답변1

복구 시 로그인한 X.org 사용자를 열거하고 필요한 모든 것을 실행할 수 있습니다. 현재 로그인한 사용자 목록을 얻는 방법에 대한 많은 솔루션이 있지만 대부분은 오래되었으며 최신 Linux 배포판에서는 작동하지 않을 수 있습니다. wwholast들어 내 Fedora 36 시스템에서는 아무것도 반환하지 않습니다 w. 마지막 항목 표시:wholastreboot

last | head -1
reboot   system boot  5.19.4-az2       Sun Sep  4 01:56   still running

그것이 당신에게 도움이 된다면, 당신은 그것을 사용할 수 있습니다.

다음은 2022년 9월부터 적용되어야 하는 현대적인 접근 방식입니다(Linux에 대한 타임스탬프 답변은 항상 좋은 생각입니다).

$ loginctl --no-legend list-sessions # or run it without any parameters
SESSION  UID USER   SEAT  TTY 
      2 1000 birdie seat0 tty7

또는 gdbus프로그래밍에 열정이 있다면:

$ gdbus call --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1 --method org.freedesktop.login1.Manager.ListSessions
([('2', uint32 1000, 'birdie', 'seat0', objectpath '/org/freedesktop/login1/session/_32')],)

계속해서 함께 일합시다 loginctl. Xorg가 사용자에게 표시하는 내용을 이해하고 싶을 수 있습니다. 방법은 다음과 같습니다.

#! /bin/bash

for session in `loginctl --no-legend list-sessions | awk '{print $1}'`; do
    echo -e "ID\tName\tDisplay"
    eval `loginctl show-session $session | egrep '^Display|^User|^Name'`
    echo -e "$User\t$Name\t$Display"
done

# output
ID  Name    Display
1000    birdie  :0

echo명령문 대신 필요한 것을 실행할 수 있습니다.

    export XAUTHORITY="`getent passwd $Name | cut -f6 -d:`/.Xauthority"
    export DISPLAY=$Display
    command

관련 정보