스크립트를 사용하여 현재 실제 콘솔 에있는 사용자 (키보드, 마우스 및 그래픽 디스플레이 명령을 가진 사용자)의 사용자 이름을 찾고 싶습니다 .
X를 실행하는 사람을 알고 싶지 않습니다 (현재 콘솔을 다른 터미널과 다른 사용자로 전환 할 수 있기 때문에).
명확히하기 위해 :
같은 명령 w
, who
등 터미널하는 기록됩니다 사람을 보여줍니다. 이것은 간단합니다. 그러나 현재 물리적 콘솔 (디스플레이, 키보드 등)을 소유하고있는 사람을 알고 싶습니다. 예를 들어, 두 사용자가 디스플레이를 실행 : 0 : 1, 나는와 디스플레이 사이를 전환 할 수 있습니다 ctrl+ alt+ 7과 ctrl+ alt+ 8, 나는 현재 자신의 표시와 실제, 실제 화면 사이의 연결을 가지고있는 사용자 알고 싶습니다 .
한 번 더 설명 : 내 사용자 이름
을 알고 싶지 않습니다 . 다른 사용자 또는 루트로 실행되고 실제 디스플레이 를 사용하는 사람을 알아야하는 스크립트가 있습니다. 다른 사용자가 실행하는 여러 개의 X 세션이있을 수 있습니다. 일부는 가상화되어 있으며 일부는 원격 X 서버에 연결되어 있지만 실제로 모니터에 출력을 표시하는 세션에만 관심이 있습니다.
또 다른 설명 :
명령이 무엇이든 Ctrl+ Alt+를 누른 후 F1(다른 가상 콘솔로 전환) 출력이 달라야합니다 .
답변
기술을 잘 모르기 때문에 구체적인 답변을 드릴 수는 없지만 D-Bus 및 ConsoleKit을 사용하여 찾을 수 있다고 생각합니다.
예를 들어, 나는 VT를 X로 전환하고 다시,이 듣기에 얻을 dbus-monitor
:
$ dbus-monitor --system | grep ConsoleKit
signal sender=:1.16 -> dest=(null destination) serial=19039 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19040 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
signal sender=:1.16 -> dest=(null destination) serial=19041 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19042 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
string "/org/freedesktop/ConsoleKit/Session2"
특히 GetActiveSession 메서드를 사용할 수 있습니다 . 방법은 다음과 같습니다 dbus-send
(필요할 수 있음 sudo
).
$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession
그런 다음 응용 프로그램에 따라 반환되는 객체의 속성을 확인해야합니다 . 세션 의 객체 경로 여야합니다 .
답변
[geek@atremis ~]$ w
20:02:02 up 2 days, 8:37, 3 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
geek tty1 :0 Thu11 2days 35.11s 0.18s pam: gdm-passwo
geek pts/0 athena Fri22 21:04m 0.03s 0.03s -bash
geek pts/1 blackbeauty 20:02 0.00s 0.14s 0.10s w
[geek@atremis ~]$
w 명령을 사용하여 누가 로그온했는지 확인할 수 있습니다. 유휴 시간 및 실행중인 내용을 알려주는 것-이 경우 gdm은 활성 로그인을 나타내고 유휴 시간은 사용자가 2 일 동안 시스템에 있지 않은 것을 나타냅니다. 이것을 사용하지 않는 0.00 유휴 시간이있는 blackbeauty의 로그인과 대조해보십시오.
답변
여러 가지 방법이 있습니다.
whoami
w
echo $USER
logname
답변
다른 명령은
whoami
현재 로그인 한 사용자 이름을 보여줍니다