2010-08-10 49 views
12

對於我的一個Linux應用程序,我有應用程序二進制文件,一個launcher.sh腳本(用於LD_LIBRARY_PATH)和一個.desktop文件,全部在同一個文件夾中。如何爲Linux桌面條目文件指定帶有RELATIVE路徑的圖標?

我想使用相對路徑而不是圖標的絕對路徑。

我已經試過:

Icon=app.svg 
Icon=./app.svg 
Icon=$PWD/app.svg 
Icon=$(dirname %k)/app.svg 

但這些工作(僅Icon=/path/to/app.svg)。如果無法指定相對路徑,並且我必須使用解決方法,那麼我認爲每次運行launcher.sh腳本時都可以重新生成.desktop文件中的圖標路徑。

什麼是最好的方法來做到這一點?使用sed或其他替代工具,使用僞正則表達式,例如Icon=([valid path chars]+)\n也許?

回答

13

在做了一些更多的研究後,看起來好像我無法爲桌面條目文件中的圖標指定相對路徑。

我所用的解決方法是將以下代碼添加到我的launcher.sh腳本的末尾:

mv myapp.desktop myapp.desktop-bak 
sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop 
rm myapp.desktop-bak 

這將更新每個啓動程序腳本運行時圖標的路徑,因爲.desktop文件指向啓動程序腳本,單擊.desktop文件有效更新其圖標。

我知道你可以使用cat或-i選項來縮短上面的代碼,但我已經讀過,我使用的解決方案更可靠。如果有人有進一步的信息,請發表評論。

+0

感謝這......儘管如此,這是一個糟糕的規範。 – 2011-08-11 13:49:38

+0

當然是......我不能相信沒有人想過添加相對路徑支持(顯然)。 – 2011-08-12 01:22:45

+0

嗯,我在其他地方讀過這是一個安全問題:如果你移動了.desktop文件,並且意外地打開了一個不同於你認爲的可執行文件的可執行文件,我想這是一個公平的觀點。但是,然後指定圖標的另一種方法會很好。 – 2011-08-12 13:23:48

相關問題