실제 콘솔을 사용하는 사람을 찾는 방법은 무엇입니까?


10

스크립트를 사용하여 현재 실제 콘솔 에있는 사용자 (키보드, 마우스 및 그래픽 디스플레이 명령을 가진 사용자)의 사용자 이름을 찾고 싶습니다 .

X를 실행하는 사람을 알고 싶지 않습니다 (현재 콘솔을 다른 터미널과 다른 사용자로 전환 할 수 있기 때문에).


명확히하기 위해 :
같은 명령 w, who등 터미널하는 기록됩니다 사람을 보여줍니다. 이것은 간단합니다. 그러나 현재 물리적 콘솔 (디스플레이, 키보드 등)을 소유하고있는 사람을 알고 싶습니다. 예를 들어, 두 사용자가 디스플레이를 실행 : 0 : 1, 나는와 디스플레이 사이를 전환 할 수 있습니다 ctrl+ alt+ 7ctrl+ alt+ 8, 나는 현재 자신의 표시와 실제, 실제 화면 사이의 연결을 가지고있는 사용자 알고 싶습니다 .


한 번 더 설명 : 사용자 이름
을 알고 싶지 않습니다 . 다른 사용자 또는 루트로 실행되고 실제 디스플레이 를 사용하는 사람을 알아야하는 스크립트가 있습니다. 다른 사용자가 실행하는 여러 개의 X 세션이있을 수 있습니다. 일부는 가상화되어 있으며 일부는 원격 X 서버에 연결되어 있지만 실제로 모니터에 출력을 표시하는 세션에만 관심이 있습니다.


또 다른 설명 :
명령이 무엇이든 Ctrl+ Alt+를 누른 후 F1(다른 가상 콘솔로 전환) 출력이 달라야합니다 .


이것은 자체 Q & A입니까?
jokerdino

안타깝게도
12

답변:


6

기술을 잘 모르기 때문에 구체적인 답변을 드릴 수는 없지만 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

그런 다음 응용 프로그램에 따라 반환되는 객체의 속성을 확인해야합니다 . 세션 의 객체 경로 여야합니다 .


3
매우 도움이됩니다. 세션을 전환하면 응답이 해당 스위치로 전환됩니다. 특히 다음 명령을 입력 할 수 있습니다 : dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUser현재 사용자 ID로 응답합니다. 거기에서 getpwuid 라이브러리 함수는 사용자 이름을 얻을 수 있습니다.
존 S Gruber

1
이것은 내가 찾던 대답입니다. 대단히 감사합니다!
1 월

5
[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의 로그인과 대조해보십시오.


아니, 이것은 당신이 쓴 것처럼 단지 누가 어떤 터미널에 로그인했는지 알려줍니다 . 스크립트와 함께 사용하려면 어떤 사용자가 실제 콘솔 (키보드, 디스플레이 등)을 소유하고 있는지 알고 싶습니다.
January

PS 유휴 시간도 정보를 제공하지 않습니다. 스크린 세이버로 스크립트를 작성하고 있지만 실제로 표시 되는 스크린 세이버 실행하는 사용자를 알고 싶습니다 .
12

여기서 TTY와 '무엇이'가 작동하면 필요한 비트 만 추출하면됩니다.
Journeyman Geek

음, 아니요. 백그라운드, 가상 머신의 다른 X 서버에서 어디서나 실행될 수 있기 때문에
12

1

여러 가지 방법이 있습니다.

  • whoami
  • w
  • echo $USER
  • logname

0

다른 명령은

whoami

현재 로그인 한 사용자 이름을 보여줍니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.