Me gustaría utilizar un script para averiguar el nombre de usuario del usuario que se encuentra actualmente en la consola física (que tiene el control del teclado, el mouse y la pantalla gráfica).
No solo quiero saber quién ejecuta X (ya que la consola actual se puede cambiar a otro terminal y a otro usuario).
Para aclarar: los
comandos como w
, who
etc. muestran quién está conectado en qué terminal. Esto es simple. Sin embargo, me gustaría saber quién posee actualmente la consola física (pantalla, teclado, etc.). Por ejemplo, si dos usuarios ejecutan pantallas: 0 y: 1, y puedo cambiar entre las pantallas con ctrl+ alt+ 7y ctrl+ alt+ 8, me gustaría saber qué usuario tiene actualmente la conexión entre su pantalla y la pantalla física real .
Una aclaración más:
no estoy interesado en conocer mi propio nombre de usuario. Tengo un script, que se ejecuta como otro usuario o root, que necesita saber quién usa la pantalla física . Puede haber varias sesiones X ejecutadas por diferentes usuarios, algunas de ellas virtualizadas, algunas conectadas a un servidor X remoto, pero solo estoy interesado en la que realmente muestra la salida en el monitor.
Otra aclaración:
cualquiera que sea el comando, la salida debe ser diferente después de presionar Ctrl+ Alt+ F1(cambiar a otra consola virtual).
Respuestas:
Me temo que no puedo darle una respuesta específica (porque no conozco bien la tecnología), pero creo que puede encontrarla usando D-Bus y ConsoleKit.
Por ejemplo, cuando cambio de X a VT y viceversa, escucho esto
dbus-monitor
:Específicamente, puede usar el método GetActiveSession . He aquí cómo con
dbus-send
(puede requerirsudo
):Luego, dependiendo de su aplicación, querrá verificar las propiedades del objeto devuelto, que debería ser una ruta de objeto a una sesión .
fuente
dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUser
que responde con el ID de usuario actual. Desde allí, la función de biblioteca getpwuid puede obtener el nombre de usuario.Puede usar el comando w para ver quién inició sesión. El tiempo de inactividad y lo que debería decirle qué se está ejecutando: en este caso, gdm indica un inicio de sesión activo, y el tiempo de inactividad indica que el usuario no ha estado en el sistema en 2 días. Compare esto con el inicio de sesión de blackbeauty, que tiene un tiempo de inactividad de 0.00, lo que indica que está actualmente en uso.
fuente
Hay muchas maneras:
whoami
w
echo $USER
logname
fuente
Otro comando es
Muestra el nombre de usuario actual logeed
fuente