Definir variável no arquivo .desktop

75

Existe uma maneira de definir a variável de ambiente no arquivo .desktop? Estou tentando executar o aplicativo (eclipse) com o estilo gtk personalizado, então basicamente quero obter o seguinte resultado executando um arquivo .desktop:

GTK2_RC_FILES=gtkrc.custom /path/to/eclipse

Tentei colocá-lo em um script bash e executá-lo a partir do arquivo .desktop, mas ele não se integra bem ao iniciador do Unity.

dotintegral
fonte

Respostas:

111

Você pode adicionar uma variável de ambiente a um aplicativo editando seu .desktoparquivo. Por exemplo, para executar "digiKam" com a variável de ambiente APPMENU_DISPLAY_BOTH=1, localize o digikam.desktoparquivo correspondente e adicione a configuração da variável, via envcomando, à entrada "Exec":

Exec=env APPMENU_DISPLAY_BOTH=1 digikam -caption "%c" %i

No seu caso:

Exec=env GTK2_RC_FILES=gtkrc.custom /path/to/eclipse
jasmim
fonte
1
como posso definir uma variável env contendo user $HOME? Nem Exec=env MYVAR="$HOME/foo"nem Exec=env MYVAR="~/foo"se expandiu. Em vez disso, eles são passados ​​literalmente.
400 the Cat
parece que você pode fazê-lo, conforme descrito no stackoverflow.com/a/8980518/1446479
Peedee
9

Uma alternativa para modificar o .desktoparquivo é colocar um script de wrapper, por exemplo ~/bin.

$ cat ~/bin/eclipse
#!/bin/sh
export GTK2_RC_FILES=gtkrc.custom
exec /usr/bin/eclipse "$@"

Dessa forma, a personalização não será substituída na próxima vez que o pacote de aplicativos for atualizado.

Editar:

Uma dica sobre o porquê disso funciona, você pode ver verificando o que a PATHvariável contém. No meu caso:

$ echo $PATH
/home/gunnar/bin:/home/gunnar/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

~/biné a primeira pasta da lista e, portanto, é vista anteriormente /usr/bin.

Gunnar Hjalmarsson
fonte
Se você simplesmente colocar o arquivo .desktop nas configurações locais, ele não será substituído.
Auspex
@Auspex: Verdadeiro. Mas, ao mesmo tempo, se você usar uma cópia local, não se beneficiará de possíveis atualizações do .desktoparquivo de propriedade do pacote .
Gunnar Hjalmarsson
Não estou vendo como colocar um invólucro ~/binvai ajudar nisso. O .desktoparquivo de propriedade do pacote nunca verá esse wrapper! Você precisaria também usarupdate-alternatives
Auspex
@ Auspex: O .desktoparquivo não precisa "ver" o wrapper. Apenas é executado eclipsee, devido ao PATHwrapper, é escolhido em vez de /usr/bin/eclipse. Eu editei a resposta para esclarecer.
Gunnar Hjalmarsson
Sim, o arquivo .desktop não precisa ver o wrapper. Eu estava pensando que o arquivo .desktop média especifica um caminho completo, mas em uma inspeção mais adicional eu acho que a maioria dos mais de sistema basta especificar um nome e de comando de modo irá ver o seu invólucro. No entanto, os únicos arquivos da área de trabalho do Eclipse que tenho estão no formato especificado na pergunta - fornecendo um caminho completo para o binário do Eclipse.
Auspex