web-dev-qa-db-ja.com

.desktopファイルはスクリプトを実行せず、手動で実行すると正常に動作します

.desktopファイルに問題があります。 「ダウンロード」フォルダーに入れられるファイルを常に監視するシェルスクリプトがあります。ファイルがフォルダーに配置されると、ターミナルで作成したCプログラムが自動的に実行され、ファイルの移動先に関するさまざまなオプションが表示されます。

すべてが順調です。ただし、プログラムへのデスクトップショートカットが必要です。ショートカットエディターを使用して、実行するコマンドを指定し、ターミナルで実行し、コマンドの実行後にターミナルを実行し続けようとしました。コマンドにあるのはcd ~/Documents/prog/c/learn/inotify-tools && ./notifyscript.shだけです

ただし、それは機能しません。また、基本的に上記のコマンドをシステムに伝えるCプログラムを、ショートカットエディターが台無しになっていると考えて書いてみました。

おもしろいことに、そのディレクトリにいるときに./'Download Manager'と入力すると問題なく動作します

ただし、再起動のたびにディレクトリを変更し続けてプログラムを実行したくありません。代わりに、.desktopショートカット、またはさらに良いことに、再起動時に自動的に開始する方法が必要です。なぜ機能しないのか分かりません。ターミナルで実行しないと機能しません...

デスクトップファイルは次のとおりです。

[Desktop Entry]
Name=Download Manager
Comment=
Exec=cd ~/Documents/prog/c/learn/inotify-tools && ./notifyscript.sh
Icon=icon name
Terminal=true
Type=Application
StartupNotify=true
X-KeepTerminal=true

別のオプションと同様に、Cソースコードとそのデスクトップファイルもここにあります。

[Desktop Entry]
Name=Download Manager
Comment=
Exec=./'Download Manager'
Icon=icon name
Terminal=true
Type=Application  
StartupNotify=true
X-KeepTerminal=true

Cソースコード:

/*
desktoplauncher.c Source Code
Written by me
This program is used to launch
the inotify monitor Shell script
which in turn launches the 
download manager program 
whenever a file is placed in the
"Downloads" folder.
*/ 

#include <stdio.h>

int main()
{
system("cd ~/Documents/prog/c/learn/inotify-tools && ./notifyscript.sh");
}
4
Zeke Legge

スクリプトをホームフォルダーに移動し、デスクトップ構成ファイルを次のように編集することで、機能するようになりました。

[Desktop Entry]
Name=Download Manager
Comment=
Exec=lxterminal --command="./.notifyscript.sh"
Icon=icon name
Terminal=false
Type=Application
StartupNotify=true

これは本当に奇妙なようです。特にターミナルが偽だからです...とにかく動作するので、嬉しいです!皆さん、助けてくれてありがとう!

3
Zeke Legge

Exec行は、おそらくシェルで値を実行しません。これを試して:

Exec=/home/user/Documents/prog/c/learn/inotify-tools/notifyscript.sh

そのディレクトリをcwdとして使用する必要がある場合は、これをシェルスクリプトに追加します。

cd -P -- "$(dirname -- "$0")"
2
glenn jackman