Crie um arquivo .desktop que abra e execute um comando em um terminal

39

Gostaria de saber como escrever o Execcomando de um arquivo .desktop para abrir um novo terminal e executar um shell script nele. O script de shell está funcionando e acessível por todos os usuários. Ao iniciar o script a partir do terminal, tudo funciona, mas não ao tentar iniciar o script a partir de um arquivo .desktop.

Aqui estão algumas combinações que eu já tentei:

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

A opção do terminal .desktop está configurada como true.

Paradiesstaub
fonte

Respostas:

46

O conteúdo do seu arquivo da área de trabalho deve ter a aparência (veja como criar um arquivo .desktop usando um 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;

Ou:

[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;

No primeiro caso, o Terminalcampo é definido como false(talvez contrário às suas expectativas) e no segundo caso é definido como true, mas o resultado é, nos dois casos, o mesmo.

Radu Rădeanu
fonte
1
A primeira solução funciona para mim, então eu continuo com ela. Você sabe por que tem que haver $ SHELL?
Paradiesstaub
1
@ Thibaut Sim, é claro .
Radu Rădeanu 24/03
Funcionou para mim, no entanto, eu quero iniciar um comando com sudo, então quando o uso do launcher criado, ele abre o terminal, solicitando a senha. Como inicio um comando e evito esse comportamento?
E_Angel
1
@EliasAlves Um pouco atrasado, mas para qualquer pessoa que esteja lendo isso: você não pode esperar executar comandos que exijam privilégios de root sem que seja necessário se autenticar. (A menos que você explicitamente configurar o seu sistema para fazer isso, que geralmente é uma idéia.)
code_dredd
Acho que a questão é: como se certificar que o aparece terminais para que o terminal não desaparece para que possamos inserir as credenciais
RockScience
2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Faça o arquivo acima. Não esqueça desudo chmod +x filename.sh

Senhor Lee
fonte
1
O problema com esta solução é que o terminal desaparece imediatamente e um usuário não é capaz de inserir algo.
Paradiesstaub
esqueci como é chamado, mas acho que há uma opção para manter o terminal ativo. Pode serhold
Mr.Lee
2

Basta adicionar

;$SHELL 

no final de seus comandos.

Como para mim, snapdnão é algo que usa largura de banda total do sistema para atualizar snaps a qualquer momento quase que eu trabalho à noite.

Então, isso funcionou para mim para criar um .sharquivo vinculado a um .desktoparquivo.
O conteúdo do .sharquivo foi

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

-Sna primeira linha do .sharquivo é usado para enviar STDINPUTpara o sudocomando, o que significa execução direta sem digitar a senha.

O conteúdo do .desktoparquivo foi:

[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;
user225
fonte
0

Eu faço isso. A primeira linha do arquivo de texto é! # / Bin / bash

Linhas subseqüentes do arquivo de texto são os comandos (o shell script).

Salve o arquivo como algo.sh

Abra as propriedades do arquivo e ative o arquivo de execução como um programa.

Agora, quando o arquivo é clicado duas vezes, tenho a opção de executá-lo.

chapeleiro
fonte
2
Mesmo aqui, o terminal desaparece imediatamente.
Paradiesstaub
Funciona para mim sem problemas. Crie o script de shell, adicione a linha! # / Bin / bash como a primeira linha. Permita que o arquivo seja executado como um executável. Clique duas vezes e selecione executar no terminal. Isso simplesmente funciona.
Hatterman
1
Você tem certeza de que o terminal não está apenas fechando porque o script do shell terminou? No início do seu script, coloque sleep 30, o terminal fica aberto por 30 segundos?
23414 Hatterman