Cree un archivo .desktop que se abra y ejecute un comando en una terminal

39

Me gustaría saber cómo escribir el Execcomando de un archivo .desktop para abrir un nuevo terminal y ejecutar un script de shell en él. El script de shell funciona y es accesible para todos los usuarios. Cuando se inicia el script desde la terminal, todo funciona, pero no cuando se intenta iniciar el script desde un archivo .desktop.

Aquí hay algunas combinaciones que ya he probado:

Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello

La opción de terminal .desktop está establecida en verdadero.

Paradiesstaub
fuente

Respuestas:

46

El contenido de su archivo de escritorio debería verse así (vea cómo crear un archivo .desktop usando un editor de texto ):

[Desktop Entry]
Version=1.0
Name=Test        
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "bash -c 'echo hello;$SHELL'"
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Application;

O:

[Desktop Entry]
Version=1.0
Name=Test        
Comment=Test the terminal running a command inside it
Exec=bash -c 'echo hello;$SHELL'
Icon=utilities-terminal
Terminal=true 
Type=Application
Categories=Application;

En el primer caso, el Terminalcampo se establece en false(quizás contrario a sus expectativas) y en el segundo caso se establece en true, pero el resultado es en ambos casos el mismo.

Radu Rădeanu
fuente
1
La primera solución funciona para mí, así que me quedo con ella. ¿Sabes por qué tiene que haber $ SHELL?
Paradiesstaub
1
@Thibaut Sí, por supuesto .
Radu Rădeanu
Funcionó para mí, sin embargo, quiero iniciar un comando con sudo, luego, cuando use el iniciador creado, se abre el terminal pidiéndome una contraseña. ¿Cómo inicio un comando y evito este comportamiento?
E_Angel
1
@EliasAlves Un poco tarde, pero para cualquier otra persona que lea esto: no puede esperar ejecutar comandos que requieren privilegios de root sin necesidad de autenticarse. (A menos que configure explícitamente su sistema para hacer eso, lo que generalmente es una mala idea.)
code_dredd
Creo que la pregunta es: cómo asegurarse de que el terminal aparezca para que el terminal no desaparezca y podamos ingresar las credenciales
RockScience
2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Haz el archivo de arriba. No te olvides desudo chmod +x filename.sh

SR. Lee
fuente
1
El problema con esta solución es que el terminal desaparece inmediatamente y un usuario no es capaz de ingresar algo.
Paradiesstaub
Olvidé cómo se llama, pero creo que hay una opción para mantener el terminal en funcionamiento. Puede serhold
Mr.Lee
2

Simplemente agregue

;$SHELL 

al final de tus comandos.

Al igual que para mí, snapdno es algo que usa el ancho de banda completo del sistema para actualizar las instantáneas en cualquier momento casi cuando trabajo de noche.

Así que esto funcionó para mí para crear un .sharchivo vinculado a un .desktoparchivo.
Los contenidos para el .sharchivo fueron

echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL

-Sen la primera línea del .sharchivo se usa para enviar STDINPUTal sudocomando lo que significa ejecución directa sin ingresar la contraseña.

Los contenidos para el .desktoparchivo fueron:

[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "/scripts/disable_snap.sh"
Icon=terminal
Terminal=true
Type=Application
Categories=Application;
usuario225
fuente
0

Hago esto. La primera línea del archivo de texto es! # / Bin / bash

Las líneas posteriores del archivo de texto son los comandos (el script de shell).

Guarde el archivo como algo.sh

Abra las propiedades del archivo y habilite ejecutar el archivo como un programa.

Ahora, cuando se hace doble clic en el archivo, tengo la opción de ejecutarlo.

sombrerero
fuente
2
Lo mismo aquí, la terminal desaparece de inmediato.
Paradiesstaub
A mí me funciona sin problemas. Cree el script de shell, agregue la línea! # / Bin / bash como la primera línea. Permita que el archivo se ejecute como un ejecutable. Haga doble clic y seleccione ejecutar en terminal. Simplemente funciona
sombrerero
1
¿Estás seguro de que el terminal no solo se está cerrando porque el script de shell ha terminado? Al comienzo de su secuencia de comandos, coloque la suspensión 30, ¿la terminal permanece abierta durante 30 segundos?
sombrerero