Como posso definir a variável 'Path' em um arquivo .desktop para ser relativa ao local em que o arquivo da área de trabalho está localizado?

11

Quero definir a variável 'Path' em um arquivo .desktop em relação ao local em que o arquivo da área de trabalho está localizado e não consigo fazer isso.

Quando não o declaro ou o coloco em branco, o padrão é minha pasta pessoal, não importa de onde eu o execute; e ele não aceita valores relativos à minha localização atual no sistema de arquivos.

kicsyromy
fonte
Eu tive esse problema. Encontrei soluções alternativas, embora às vezes radicalmente complicadas, dependendo do que você está fazendo. Você está usando uma solução alternativa neste momento? Caso contrário, talvez eu possa ajudar com isso. Não encontrei documentos xdg que explicam muito sobre isso.
bambuntu
OP você ainda está procurando uma resposta? Nesse caso, talvez seja necessário reposicionar sua pergunta, pois ela está marcada para encerramento. Saudações,
Ringtail

Respostas:

3

Você não pode definir o CWD dentro de um arquivo .desktop. Se você deseja que um aplicativo tenha um CWD específico, será necessário escrever um script de wrapper simples para o aplicativo, parecido com o seguinte:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Você pode substituir por your_program$@e executar o script com seu_programa como argumento, como run-in-dir.sh your_program. Dessa forma, você pode usar o mesmo script para agrupar qualquer programa que deseja iniciar nesse diretório.

dobey
fonte
14

Você pode contornar isso usando um mini-script bash in-line no seu Exec. Isso adicionará o caminho do arquivo .desktop ao PATH antes de executar seu comando.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k será substituído pelo caminho do próprio arquivo da área de trabalho. O dirnamecomando corta a parte do nome do arquivo, deixando apenas o diretório. Depois que PATH é definido assim, your_commandpode ser chamado sem um caminho completo.

roadmr
fonte
1
Cliquei para acelerar e votei no errado, mas sua solução é perfeita.
CrandellWS
1
isso poderia funcionar muito bem com esta outra pergunta / resposta stackoverflow.com/a/3464561/1815624
CrandellWS
2

Eu usei isso:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

O% k é o nome completo do arquivo .desktop, incluindo seu caminho. Em seguida, é usado pelo dirname para obter um local e alterar o diretório para esse local. Finalmente, agora que está no lugar certo, ele encontra o script e o executa.

Marian
fonte
0

Para nomes de diretório com espaços no nome, isso finalmente funcionou para mim:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Crédito para /unix//a/144428/61349

ThorSummoner
fonte
0

Isso funcionou para mim Ubuntu 14.04:

Exec=bash -c "cd %k && ./app.run"

A especificação mais recente diz que % k aponta para o local do arquivo da área de trabalho:

% k - O local do arquivo da área de trabalho como um URI (se, por exemplo, obtido do sistema vfolder) ou como um nome de arquivo local ou vazio, se nenhum local for conhecido.

nexayq
fonte