Las siguientes son otras preguntas que creo que necesito saber:
¿De una sesión no X? (lo que significa que la raíz no está conectada a X)
Si varias personas iniciaran sesión en X, ¿podría detectar automáticamente quién estaba en qué pantalla y, por lo tanto, detectar mediante programación qué pantalla necesito para iniciar la aplicación?
¿Puedo iniciar la aplicación como usuario? (ok, estoy 99.999% seguro de que esto es un sí)
¿Puedo detectar si los usuarios del grupo X están conectados a X?

naga_plugged.plscript termine (o se bifurca en segundo plano), porqueudevestará esperando a que salga.Respuestas:
Para iniciar un programa gráfico en el escritorio de un usuario, debe encontrar dos cosas: en qué pantalla se encuentra el escritorio del usuario (la dirección) y qué cookie de autorización usar (la contraseña).
El siguiente comando debe enumerar las pantallas locales en las que el usuario ha iniciado sesión (una por línea) en la mayoría de los dispositivos:
Encontrar la cookie de autorización es un poco más difícil. Debe buscar el archivo de cookies del usuario, que es el
~/.Xauthoritypredeterminado (todo lo que necesita es la ubicación del archivo de cookies, no necesita extraer la cookie de él). Eso funciona en muchos sistemas, pero no en todos; depende del administrador de pantalla y de cómo está configurado, y en particular Gdm (el predeterminado en Ubuntu) no usó la ubicación predeterminada la última vez que busqué. No puedo pensar en una forma portátil de descubrir el archivo de cookies X real. La forma más precisa de averiguarlo es averiguar el pid del proceso X y buscar el argumento de la-authopción. Otra forma es encontrar un proceso que se ejecute en ese servidor X y tomar suXAUTHORITYvariable de entorno. Si tiene problemas para encontrar el archivo cookie, veaAbrir una ventana en una pantalla X remota (¿por qué "No se puede abrir la pantalla")?Una vez que tenga ambas piezas de información, coloque la pantalla elegida en la
DISPLAYvariable de entorno, el archivo de cookie de autoridad X elegido en laXAUTHORITYvariable de entorno, y estará listo. No importa a qué usuario se ejecuta el programa; combina consusi quieres.fuente
psohtopo ...pids=$(pgrep -u $target_user nautilus)obtiene el pid, y ¿dónde tengo que poner una-authopción?-authopción en ningún lado. Es posible que deba buscarlo en la línea de comandos del proceso del servidor X para averiguar qué poner en laXAUTHORITYvariable de entorno. Si tiene el proceso de un cliente, lo que necesita no es nada-authmás que el valor de laXAUTHORITYvariable de ese cliente . No entiendo lo que intentas hacer. Es posible que desee hacer una nueva pregunta.No puedo probar esto por completo ya que todas mis máquinas tienen la raíz deshabilitada.
Para encontrar en qué pantalla está un usuario, puede usar el
whocomando. La última columna de salida suele ser la PANTALLA en la que el usuario ha iniciado sesión. Algo como esto podría usarse para capturar solo la pantalla (es probable que haya una forma mucho más eficiente de hacer esto, no dude en ofrecer ediciones):Luego, para iniciar un comando gráfico X en esa pantalla:
donde: 0 se reemplazaría con la pantalla que encontraste en el primer comando y firefox se reemplazaría con el comando que quieras ejecutar. Podría poner esto en un script de shell y simplemente usar una variable.
La siguiente parte es la parte que no he probado, pero no veo por qué no debería ser posible hacerlo:
para iniciar el comando X como ese usuario.
fuente
sudo -iy no podía estar seguro de si los resultados serían diferentes de ejecutarlo después de iniciar sesión directamente como root. :-)who | grep xeno| awk '{print $5}' | sed 's/[(|)]//g' | grep -v ^$parece funcionar ...Podrías ver cómo lo hace acpid. Por ejemplo, cuando emite comandos xscreensaver o deja en blanco la pantalla para cada usuario que ejecuta X o X-session.
Por ejemplo, en Ubuntu, este archivo contiene cosas relacionadas:
Contiene este bucle:
fuente
/usr/share/acpi-support/power-funcs. Llamafgconsolepara encontrar el vt de Linux activo, luego busca un servidor X que se muestre en esta consola y descubre al usuario desde allí. Luego se usa~/.Xauthoritycomo la cookie X, que a menos que haya algo que me falta, significa que en realidad no podrá conectarse al servidor X (la configuración predeterminada de Ubuntu, usando gdm, no almacena las cookies X en el hogar del usuario directorio).getXuser: command not foundUna extensión de la respuesta de Gilles es cómo encontrar el archivo cookie. Una forma de hacerlo puede ser después de configurar la
DISPLAYvariable de entorno (como lo describe Gilles), usarstracepara encontrar elxhostacceso a los archivos . Puedo pensar en algo así en BASH:El resultado del código anterior se verá así:
Como puede ver claramente, el archivo de cookies aparecerá directamente aquí.
fuente
En mi investigación para encontrar una forma elegante de mostrar la GUI o la tarea X desde un entorno limitado, como las reglas de udev o del superusuario, recientemente creé una herramienta para encajar con ella ( para más detalles ).
xpubes un script de shell para obtener las variables del entorno de visualización X con respecto al TTY actual o dado.Este es un ejemplo con una regla udev:
$env{ENV}: si current-tty-user inicia X, de lo contrario, elimínelo.El principio es el mismo para una línea de comandos que utiliza
export:fuente