Come scoprire chi sta usando la console fisica?


10

Vorrei usare uno script per scoprire il nome utente - dell'utente che si trova attualmente sulla console fisica (che ha il comando della tastiera, del mouse e del display grafico)?

Non voglio solo sapere chi esegue X (poiché la console corrente può essere commutata su un altro terminale e un altro utente).


Per chiarire:
comandi come w, whoecc. Mostrano chi è loggato su quale terminale. Questo è semplice Vorrei sapere, tuttavia, chi possiede attualmente la console fisica (display, tastiera, ecc.). Ad esempio, se due utenti eseguono display: 0 e: 1 e posso passare da uno schermo all'altro con ctrl+ alt+ 7e ctrl+ alt+ 8, vorrei sapere quale utente ha attualmente la connessione tra il suo schermo e lo schermo fisico effettivo .


Un altro chiarimento:
non mi interessa conoscere il mio nome utente. Ho uno script, in esecuzione come un altro utente o root, che deve sapere chi utilizza il display fisico . Possono esserci diverse sessioni X eseguite da utenti diversi, alcune virtualizzate, alcune connesse a un server X remoto, ma sono interessato solo a quello che sta effettivamente visualizzando l'output sul monitor.


Ancora un altro chiarimento:
qualunque sia il comando, l'output deve essere diverso dopo aver premuto Ctrl+ Alt+ F1(passando a un'altra console virtuale).


È un Q&A autonomo?
jokerdino

No Sfortunatamente.
Gennaio

Risposte:


6

Temo di non poterti dare una risposta specifica (perché non conosco bene la tecnologia), ma credo che tu possa scoprirlo usando D-Bus e ConsoleKit.

Ad esempio, quando passo da X a un VT e viceversa, ottengo questo ascolto su 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"

In particolare, è possibile utilizzare il metodo GetActiveSession . Ecco come dbus-send(potrebbe richiedere sudo):

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

Quindi, a seconda dell'applicazione, ti consigliamo di verificare le proprietà dell'oggetto restituito, che dovrebbe essere un percorso oggetto di una sessione .


3
Molto utile, penso. Quando cambio sessione, la risposta cambia di conseguenza. In particolare potrei quindi inserire il seguente comando: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUserche risponde con l'attuale user-id. Da lì la funzione di libreria getpwuid può ottenere il nome utente.
John S Gruber,

1
Questa è sicuramente la risposta che stavo cercando. Grazie mille!
Gennaio

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 ~]$

È possibile utilizzare il comando w per vedere chi è connesso. Il tempo di inattività e cosa dovrebbe dirti cosa viene eseguito: in questo caso gdm indica un accesso attivo e il tempo di inattività indica che l'utente non è stato nel sistema da 2 giorni. Contrastalo con il login di blackbeauty, che ha un tempo di inattività di 0.00, che indica che è attualmente in uso.


No, questo mi dice solo - come hai scritto - chi è connesso a quale terminale . Per utilizzare con uno script, mi piacerebbe sapere quale utente è possedere la console fisica (tastiera, display, ecc)
Gennaio

Anche il tempo di inattività di PS non è informativo; Sto lavorando a uno script che giocherella con uno screensaver, ma voglio sapere quale utente sta eseguendo lo screensaver che viene effettivamente visualizzato .
Gennaio

il TTY e "cosa" potrebbero funzionare qui, avresti solo bisogno di estrarre i bit necessari.
Journeyman Geek,

Uhm, no, perché può essere eseguito ovunque (in fondo, su un altro server X, in una macchina virtuale)
Gennaio


0

Un altro comando è

whoami

Mostra il nome utente logeed corrente

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.