Cómo cerrar la aplicación desde el terminal de la misma manera que salir correctamente

9

Por lo general, cuando ejecuto la aplicación en un entorno gráfico, cuando quiero cerrarla, hago clic Xen la esquina superior izquierda de la ventana o voy a File > Close.

A veces me gustaría cerrar estos programas de forma remota a través de ssh desde la terminal usando la línea de comando, ahora uso el killcomando pero me pregunto si hace lo mismo que salir de la aplicación correctamente.

La man killseñal predeterminada parece ser 15) SIGTERM, ¿esta señal le dirá a la aplicación que estoy tratando de cerrar para limpiar, cerrar archivos abiertos, guardar cosas?

¿Hay una mejor manera si quiero hacerlo desde la terminal?

Miguel
fuente
2
¡Gracias por preguntar! Aprendí algo que seguramente será útil en algún momento.
Oliphaunt - reinstalar a Monica el

Respuestas:

9

La forma típica de cerrar la aplicación con gracia es usar kill -TERM 1234, donde 1234está el PID de la ventana. Sin embargo, el problema es que las aplicaciones gráficas están diseñadas para escuchar una señal específica del propio servidor X, no para escuchar la TERMseñal.

Eso significa que necesitaría algún tipo de agente entre usted y el servidor X para comunicar que desea enviar la señal adecuada. Por supuesto, puede escribir un programa en C, sin embargo, ya existe un wmctrlprograma (no sorprendentemente escrito en C) que hace exactamente eso.

El uso de wmctrles simple:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

No está instalado por defecto, así que consíguelo con sudo apt-get install wmctrl

Hay muchos usos para wmctrlmucho más que simplemente cerrar ventanas, así que vea más de mis respuestas y las de Jacob Vlijm para ver ejemplos de scripts donde se ha utilizado

Sergiy Kolodyazhnyy
fuente
2
Simplemente agregue aquí que wmctrl -lenumerará todas las ventanas y dará la identificación numérica en hexadecimal en la primera columna. =)
Terrance
Gracias, funciona muy bien con la mayoría de las aplicaciones, pero con Deluge hay una opción Minimize to tray on closey wmctrl -csolo cerrará una ventana, no la aplicación en sí, se mantendrá funcionando minimizado en la bandeja.
Mike
3

Creo que vale la pena agregar que wmctrl -xlgenerará resultados como este:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Donde xsolicita que la clase de ventana esté en la salida. Esta es a menudo la forma más fácil de cerrar el mismo programa cada vez. Luego, podemos suministrar la clase de ventana al cerrarla:

wmctrl -xc speedcrunch.Speedcrunch

Este ejemplo cerrará speedcrunch.

Daniel Centore
fuente