기존 문제systemd가 깨어난 후 사용자 스크립트를 실행하는 방법은 무엇입니까?잠에서 깨어난 후 스크립트를 실행할 수 있는 답변이 이미 있습니다. 그러나 이 문제에 대해 제공되는 솔루션에는 사용자를 위한 하드 코딩이 필요합니다.
현재 기록된 모든 그래픽 데스크탑 세션에서 자동으로 실행되는 스크립트를 생성하려면 어떻게 해야 합니까?(즉, 빠른 사용자 전환/"계정 전환"을 사용하여 여러 가상 터미널에서 여러 데스크톱을 병렬로 실행할 때 올바른 환경 변수 값을 사용하고 각 사용자에 대해 스크립트를 실행해야 합니다 DISPLAY
. XAUTHORITY
)
나는 개인적으로 이것을 사용하여 lightdm
새 세션을 생성하거나 기존 세션에 다시 로그인하지만 디스플레이 관리자 독립 솔루션을 선호합니다.
답변1
복구 시 로그인한 X.org 사용자를 열거하고 필요한 모든 것을 실행할 수 있습니다. 현재 로그인한 사용자 목록을 얻는 방법에 대한 많은 솔루션이 있지만 대부분은 오래되었으며 최신 Linux 배포판에서는 작동하지 않을 수 있습니다. w
예 who
를 last
들어 내 Fedora 36 시스템에서는 아무것도 반환하지 않습니다 w
. 마지막 항목 표시:who
last
reboot
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