GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿La aplicación basada en interfaz gráfica de usuario ejecuta comandos de shell en segundo plano?

Migré a Ubuntu 16.04 hace solo 2 días desde Windows. Me gusta la forma en que podemos personalizar Unity Desktop. Solo estoy jugando con la apariencia del entorno de escritorio. Al igual que en Windows, quería que el lanzador estuviera en la parte inferior de la pantalla. Buscando en Google, encontré un comando que dice:

gsettings set com.canonical.Unity.Launcher launcher-position Bottom

Además, están el editor unity-tweak-tool y dconf para hacer el trabajo. Pero estos son el enfoque de GUI para hacer las cosas.

Mis preguntas son:

  • ¿Estas aplicaciones basadas en GUI también ejecutan el mismo comando en segundo plano?
  • ¿Cómo echar un vistazo al funcionamiento interno de estas aplicaciones? Quiero decir, ¿hay alguna forma de ver realmente los comandos que se ejecutan con cada clic del botón?
  • ¿Estas aplicaciones abren una terminal en segundo plano y ejecutan estos comandos?

La respuesta aquí indica cómo obtener el descriptor de archivo estándar del proceso. Pero no obtuve nada en la salida.

Además, el strace -p pid -o output.txt El comando arroja una gran cantidad de texto en el archivo.

Entonces, en resumen, ¿es lo mismo hacer cosas usando aplicaciones GUI que hacer cosas desde la línea de comandos?

Respuesta aceptada:

¿Estas aplicaciones basadas en GUI también ejecutan el mismo comando en segundo plano?

Si y no. Escriben en el dconf base de datos de configuraciones, pero podrían estar usando diferentes formas de hacerlo. Los programas escritos en Python probablemente usarán el gi.repository.Gio módulo (lo sé porque lo uso mucho) o en su lugar pueden usar gsettings como un comando externo llamando a subprocess.Popen(['gsettings','org.some.schema','some-key','value']) , y básicamente se ejecutará como un comando de shell. Un programa en C usará algo similar, probablemente un gio.h biblioteca, o incluso podría usar el exec() familia de funciones para hacer lo mismo que Popen hace en python. Entonces, para responder a su pregunta del título:"¿La aplicación basada en GUI ejecuta comandos de shell en segundo plano?" Pueden, pero probablemente no sea necesario porque hay una biblioteca para cualquier idioma en el que esté escrita la aplicación, y probablemente será un poco más rápido usar una función de biblioteca que generar un nuevo proceso.

Para darle una muestra de cómo se hace con bibliotecas/módulos, no dude en echar un vistazo al código fuente de mi indicador de lista de inicio. Allí he escrito una función para crear una instancia de Gio.Settings class y luego utilícelo para modificar el iniciador de Unity según el tipo de lista que desee tener allí.

¿Cómo echar un vistazo al funcionamiento interno de estas aplicaciones? Quiero decir, ¿hay alguna forma de ver realmente los comandos que se ejecutan con cada clic del botón?

No. Si desea ver qué comando se emite en el lenguaje de programación de esa aplicación cuando presiona un botón o hace clic en los elementos de la ventana, entonces no es posible. Lea el código fuente de la aplicación, si es posible obtenerlo. Puedes usar dconf watch / para ver qué configuraciones se están cambiando, pero no cómo se hace.

Relacionado:¿Windows 8 no arranca a través de GRUB después de instalar Ubuntu con reparación de arranque?

Técnicamente, si sabe cómo operar un depurador, leer direcciones de memoria y conoce algo de lenguaje ensamblador, entonces puede saber qué hace una aplicación en el nivel de CPU y memoria. Esto se conoce como ingeniería inversa de software y los profesionales de seguridad lo utilizan con frecuencia para analizar software malicioso y descubrir vulnerabilidades en software legítimo.

¿Estas aplicaciones abren una terminal en segundo plano y ejecutan estos comandos?

No, no hay ningún terminal conectado. Muchos programas saben dónde está el dconf base de datos para el usuario se encuentra y escribir allí. También hay un bus de comunicación entre procesos conocido como dbus , donde los programas pueden enviar señales, y un programa será como "¡Oye, ese es un mensaje para mí!"

Anexo

  • ¿Pueden las aplicaciones ejecutar otras aplicaciones? Sí, eso se hace a través de fork() estándar y execve() llamadas del sistema. La esencia de la creación de procesos en Linux y otros sistemas *nix se basa en gran medida en estos dos. El mecanismo de shell para ejecutar comandos no incorporados lo usa mucho en particular. Cuando corres de forma interactiva

    $ ls 
    

    el shell creará un nuevo proceso a través de fork() , ese proceso ejecutará execve() que comenzará ls . Debido a cómo execve() ese nuevo proceso bifurcado será ls . El pipe() la llamada al sistema es lo que ayudará a leer la salida de ls . Sugiero encarecidamente leer mi respuesta para ¿Cuál es la diferencia entre canalización y redirección para comprender cómo funciona el mecanismo de canalización? No es solo | operador, pero en realidad es una llamada al sistema.

  • ¿Pueden las aplicaciones ejecutar comandos de shell? No. La sintaxis de Shell solo la entiende el propio Shell. Sin embargo, lo que puede hacer es iniciar un shell con una línea de comando -c cambie y proporcione los comandos apropiados. Esto se usa a menudo para accesos directos personalizados establecidos en GNOME u otros entornos de escritorio, ya que los accesos directos personalizados funcionan en ejecutables y no hay un shell para comprender la sintaxis. Por lo tanto, como ejemplo, haría bash -c 'xdotool key Ctrl+Alt+T' para ejecutar indirectamente xdotool comando o bash -c 'cd $HOME/Desktop; touch New_File' para crear un nuevo archivo en el escritorio a través de un acceso directo. Este es un ejemplo particularmente interesante ya que puede usar una variable de shell, ya que está usando un shell explícitamente.


Ubuntu
  1. ¿Qué sucede exactamente cuando ejecuto un archivo en el Shell?

  2. Personalización de Bash Shell:Negrita/color ¿El comando?

  3. ¿Cómo ejecutar un script de Shell en segundo plano?

  4. Archivo .desktop. ¿Hubo un error al iniciar la aplicación?

  5. Comprender los comandos de control de trabajos en Linux:bg, fg y CTRL+Z

Cómo cambiar la fuente de GNOME Shell

Cómo ejecutar comandos de Shell a través del servidor HTTP

Controlador de brillo:una aplicación GUI para controlar el brillo en Ubuntu

5 formas de abrir la aplicación Ubuntu Terminal

Gnome 3.2 ¿Problemas en el caparazón?

¿Cómo puedo ocultar la salida de una aplicación de shell en Linux?