내 시스템의 각 작업 영역마다 다른 사용자가 있습니다. 이는 북마크, 파일 및 기타 기본값을 분리하기 위한 것입니다.
일반적으로 여러 명의 "사용자"가 동시에 로그인되어 있으며, 당시 작업 중인 프로젝트를 변경할 때 이들 사이를 전환합니다.
Ubuntu 18.04 및 Gnome 데스크탑 환경을 사용하고 있습니다.
다른 프로젝트에서 작업할 때를 추적하고 싶습니다. 이러한 세션을 추적하는 것이 쉬운 방법이라고 생각합니다. 하지만 어떤 사용자가 GUI를 사용하고 있었는지 알려주는 로그가 있는지는 모르겠습니다. 시간, 또는 그러한 추적기를 만드는 방법.
추적기에 필요하다고 생각되는 두 가지 세부 사항은 다음과 같습니다. 1.) 사용자가 열린 세션의 잠금을 해제할 때를 포함하여 사용자가 로그인할 때의 이벤트 2.) 비활성으로 인해 화면이 잠길 때
이것이 문서화되었거나 문서화될 수 있는지 아는 사람이 있습니까?
감사해요! 우디
해결책: (아래 meuh의 도움과 이 질문으로:화면이 잠기거나 잠금 해제될 때 스크립트를 실행하는 방법은 무엇입니까?)
추적하려는 각 사용자에 대해 ~/.profile에서 다음 스크립트를 실행해야 하며 로그인/로그아웃 시간은 OUTPUTFILE에 기록됩니다.
초기 에코는 사용자가 로그인한 후에만 스크립트가 실행되기 때문에 발생합니다. 그렇지 않으면 손실됩니다. 모든 후속 로그인은 dbus-monitor에서 캡처됩니다.
#!/bin/bash
echo $(date), $USER, SCREEN_UNLOCKED >> OUTPUTFILENAME
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo $(date), $USER, SCREEN_LOCKED >> OUTPUTFILENAME;;
*"boolean false"*) echo $(date), $USER, SCREEN_UNLOCKED >> OUTPUTFILENAME;;
esac
done
답변1
이를 달성하는 가능한 방법은 다음을 사용하는 것입니다.버스. 이는 매우 일반적이어서 사용하기 어려운 다양한 작업 간의 통신 메커니즘입니다. 다음과 같은 이벤트를 찾아야 합니다.신호, systemd와 같은 것에 의해 버스를 통해 전송됩니다.로그인했습니다데몬과 그놈 화면 보호기.
버스에 액세스하는 최소 3개의 서로 다른 C 라이브러리와 관리 가능한 Python 라이브러리가 몇 개 더 있습니다. 그리고 데이터를 추출하기 위한 쉘 스크립트를 작성하는 데 충분한 몇 가지 간단한 명령줄 인터페이스가 있습니다. 예를 들어,
dbus-monitor --system
(필요할 수 있음 sudo
) 통화 및 이벤트를 표시하기 위해 지속적으로 실행됩니다. 로 시작하는 signal
스탠자를 찾아보세요 path=/org/freedesktop/login1...
. 여기 seat0
에는 누군가가 로그인하거나 로그아웃하는 시점, 사용자(메인 콘솔)가 변경되는 시점, 유휴 상태로 인해 디스플레이가 잠기는 시점에 대한 정보가 정교한 방식으로 포함됩니다 .
체계내 자신의 대체 명령을 만들었습니다.
sudo busctl monitor
다양한 형식으로 정보를 제공합니다. 그리고 gdbus monitor ...
무엇을 들을지 설명하려면 더 많은 매개변수가 필요합니다.
또는 로그인할 때마다 다음과 같은 워크시트 시간 추적 도구를 사용해 볼 수도 있습니다.길(나는 이것에 대해 아무것도 모른다) 그런 다음 정보를 병합합니다.
답변2
loginctl
session-id
사용자 목록이 제공됩니다. 여기에서 를 사용할 수 loginctl show-session <session-id>
있으며 이러한 세션의 또는 을 볼 수 있습니다 Type=x11
.Type=wayland
예는 다음과 같습니다.
$ loginctl
SESSION UID USER SEAT TTY
19 1000 stew pts/2
2 1000 stew seat0 tty2
20 1000 stew seat0 tty6
3 sessions listed.
$ loginctl show-session 19 -p Type
Type=tty
$ loginctl show-session 2 -p Type
Type=x11
$ loginctl show-session 20 -p Type
Type=tty
이 경우 SSH와 두 개의 TTY를 통해 시스템에 로그인했습니다. TTY 중 하나가 X11을 실행 중입니다.
로그는 아니지만 정기적으로 폴링하면 로그를 생성할 수 있습니다.