バックグラウンドモードで実行される端末アプリケーションのメニュー項目を作成する方法

バックグラウンドモードで実行される端末アプリケーションのメニュー項目を作成する方法

たとえば、シナモンメニューからワンクリックで手動でインストールされたElasticSearchインスタンスを起動したいとします。

私ができることは、/opt/elasticsearch-1.6.2/bin/elasticsearch &アプリがバックグラウンドで起動されることです。だから、メニュー項目を追加して同じ動作を達成したいと思います。しかし、バックグラウンドモードでは起動できず、フォアグラウンドのみが機能しているようです。

動作します(ただし、fgのみ)。

$ cat ~/.local/share/applications/elasticsearch-1.6.2.desktop
[Desktop Entry]
Version=1.6.2
Type=Application
Name=ElasticSearch
Icon=/opt/elasticsearch-1.6.2/bin/elasticsearch-icon.png
Exec="/opt/elasticsearch-1.6.2/bin/elasticsearch"
Comment=ElasticSearch 1.6.2
Categories=Development;Server;
Terminal=true
StartupWMClass=elasticsearch

動作しません(&最後にExecで設定してみてください)。

Exec="/opt/elasticsearch-1.6.2/bin/elasticsearch &"

私は何を逃したことがありませんか?

答え1

次のことを試すこともできます。

x-terminal-emulator -e /opt/elasticsearch-1.6.2/bin/elasticsearch &

これは通常、-e(xterm、ROXterm、XFCE4-terminal)をサポートするデフォルト端末(互換性がある場合は優先端末を指定できます)を使用する必要があります。それはalsamixerで動作します。

答え2

これが最も適切な答えかどうかわかりません。しかし、これはついに私にとって効果的でした。

  1. 次の方法でElasticSearchを起動するシェルスクリプトを作成します。nohup

    #!/usr/bin/env sh
    # -*- coding: utf-8 -*-
    nohup /opt/elasticsearch-1.6.2/bin/elasticsearch 2> /dev/null &
    
  2. シェルスクリプトを/usr/local/bin(オプション)に移動して実行可能にします。

    chmod +x elasticsearch && mv elasticsearch /usr/local/bin/
    
  3. シェルスクリプトを呼び出すようにデスクトップポータルを構成する

    [Desktop Entry]
    Version=1.6.2
    Type=Application
    Name=ElasticSearch
    Icon=/opt/elasticsearch-1.6.2/bin/elasticsearch-icon.png
    Exec=elasticsearch
    Comment=ElasticSearch 1.6.2
    Categories=Development;Server;
    Terminal=false
    StartupWMClass=elasticsearch
    

このアプローチにはnohup追加のリソースが必要ですが、シェルスクリプトでアウトソーシングする方がより一般的なソリューションであり、他のアプリケーションにも適しているという利点があります。

関連情報