Bagaimana cara mengetahui siapa yang menggunakan konsol fisik?

10

Saya ingin menggunakan skrip untuk mengetahui nama pengguna - pengguna yang saat ini ada di konsol fisik (yang memiliki perintah keyboard, mouse, dan tampilan grafis)?

Saya tidak hanya ingin tahu siapa yang menjalankan X (karena konsol saat ini dapat dialihkan ke terminal lain dan pengguna lain).


Untuk memperjelas:
Perintah seperti w, whodll. Menunjukkan siapa yang login di terminal mana. Ini sederhana. Namun saya ingin tahu, siapa yang memiliki konsol fisik (layar, keyboard, dll.). Misalnya, jika dua pengguna menjalankan layar: 0 dan: 1, dan saya dapat beralih di antara layar dengan ctrl+ alt+ 7dan ctrl+ alt+ 8, saya ingin tahu pengguna mana yang saat ini memiliki koneksi antara layarnya dan layar fisik yang sebenarnya. .


Satu klarifikasi lagi:
Saya tidak tertarik mengetahui nama pengguna saya sendiri . Saya memiliki skrip, berjalan sebagai pengguna atau root lain, yang perlu tahu siapa yang menggunakan tampilan fisik . Mungkin ada beberapa sesi X yang dijalankan oleh pengguna yang berbeda, beberapa di antaranya divirtualisasikan, beberapa di antaranya terhubung ke server X jarak jauh, tetapi saya hanya tertarik pada salah satu yang benar-benar menampilkan output pada monitor.


Namun klarifikasi lain:
Apa pun perintahnya, output harus berbeda setelah menekan Ctrl+ Alt+ F1(beralih ke konsol virtual lain).

Januari
sumber
Apakah ini tanya jawab sendiri?
jokerdino
Tidak, sayangnya.
Januari

Jawaban:

6

Saya khawatir saya tidak bisa memberikan jawaban spesifik (karena saya tidak tahu teknologinya dengan baik), tetapi saya yakin Anda bisa mengetahuinya menggunakan D-Bus dan ConsoleKit.

Misalnya, ketika saya beralih dari X ke VT dan kembali, saya mendengarkan ini 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"

Khususnya, Anda bisa menggunakan metode GetActiveSession . Begini caranya dengan dbus-send(mungkin memerlukan sudo):

$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession

Kemudian, tergantung pada aplikasi Anda, Anda ingin memeriksa properti objek yang dikembalikan, yang seharusnya menjadi path objek ke Sesi .

nfirvine
sumber
3
Sangat membantu, saya pikir. Ketika saya berganti sesi, balasannya juga berubah. Secara khusus saya kemudian dapat memasukkan perintah berikut: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUseryang menjawab dengan user-id saat ini. Dari sana fungsi perpustakaan getpwuid bisa mendapatkan nama pengguna.
John S Gruber
1
Ini jelas jawaban yang saya cari. Terima kasih banyak!
Januari
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 ~]$

Anda dapat menggunakan perintah w untuk melihat siapa yang masuk. Waktu idle dan apa yang harus memberi tahu Anda apa yang sedang dijalankan - dalam hal ini gdm menunjukkan login aktif, dan waktu idle menunjukkan pengguna belum berada di sistem dalam 2 hari. Bandingkan ini dengan login dari blackbeauty, yang memiliki waktu idle 0,00, yang menunjukkan saat ini sedang digunakan.

Journeyman Geek
sumber
Tidak, ini hanya memberi tahu saya - seperti yang Anda tulis - siapa yang masuk di terminal mana . Untuk menggunakan dengan script, saya ingin tahu mana pengguna memiliki konsol fisik (keyboard, tampilan dll)
Januari
Waktu idle PS juga tidak informatif; Saya sedang mengerjakan skrip yang mengutak-atik screensaver, tapi saya ingin tahu pengguna mana yang menjalankan screensaver yang sebenarnya ditampilkan .
Januari
TTY dan 'apa' mungkin bekerja di sini, Anda hanya perlu mengekstrak bit yang diperlukan.
Journeyman Geek
Um, tidak ada, karena dapat dijalankan di mana pun (di latar belakang, pada server X yang lain, dalam mesin virtual)
Januari
1

Ada banyak cara:

  • whoami
  • w
  • echo $USER
  • logname
hytromo
sumber
0

Perintah lain adalah

whoami

Ini menunjukkan nama pengguna logeed saat ini

Ketan Patel
sumber