#!/bin/sh
xfce4-terminal
zenity --info
exit
スクリプトがキーボードショートカットを介して実行されたときにXfce4デスクトップで予想される動作は次のとおりです。端末ウィンドウが表示されます。私は同じものを閉じたときにのみ行う必要がありますジェニティこれでウィンドウが表示されます。
通常、これが正確に起こるものです。しかし、Xfce4を初めて開くと端末ウィンドウを開いてテーマスクリプトをコマンドすると(もう一度キーボードショートカットを介して)、他のターミナルウィンドウが(予想どおり)表示されますが、同時にジェニティ窓。これは歓迎されない行動です。
wait
私はコマンドや行terminal
の後に追加することを含む多くのことを試しました&&
。
これが起こる原因は何であり、どのように解決しますか?
答え1
一度試してみてください。テストしてみましたが大丈夫です。
xfce4-terminal -x bash -c 'trap "zenity --info" EXIT; bash'
実行すると、新しいxfce4端末が開き、次のコマンドが実行されます。このコマンドはシェルですtrap
。これは、同じプロセス(新しく開いた端末)がEXIT信号を受信すると、参照されたコマンドが実行されることを意味します。最後にbash
トラップを設定した後、次のプロンプトが表示されます。郵便はがき。私も試してみました-H
が、望む効果が得られませんでした。
答え2
これhttps://bugzilla.xfce.org/show_bug.cgi?id=14544
これは10年前です。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=434863
提案:xfce4-terminal --disable-server -e "command args ..."
そして私が感じたまさに副作用はないようです。
-e オプションなしで動作します。私自身の使い方と以前のバグレポートの使い方には-eが必要なので、「-eへの影響」についてのみ話しますが、OPの使い方には-eは含まれず、オプションによって通常の新しい端末自体がブロックされます。そして、-eで指定されたコマンドだけではありません。
明らかに、何が起こっているのか(フラグなしで)端末を直接生成せずに単にクライアントとして機能し、サーバーが端末を生成するようにサーバーに要求を送信するということです。これは小さなメッセージを送信するだけで、実際の端末は他の場所で発生する無関係なプロセスであるため、すぐに終了します。
サーバーとクライアントは同じバイナリです。サーバーがまだ実行されていない場合は、そのうちの1つが起動して使用され、開いているターミナルウィンドウがある限り存在します。
ただし、すべての場合に最初に呼び出されたかどうかにかかわらず、起動プロセスはすぐに終了します。
ターミナルアプリを使用したい他のすべてのプログラムとのすべての期待と相互運用性を破らない限り、これは必ずしも悪いシナリオではありません。
以前のバグレポートは一時ファイルを生成し、端末でテキストエディタを実行してその一時ファイルを編集し、端末が終了するまでブロックし、一時ファイルを選択してタスクを実行できると予想されるアプリケーションについてでした。以降、運用ユーザーが編集しました。これは世界の他のすべてでは動作しますが、xfce4-terminalでは動作しません。しかし、xfce4開発者は、ユーザーが何十回も間違っていたと言います。
--disable-server オプションは問題を解決しているように見えますが、そこでも実際に行われている作業を有用な方法で言及しないように多くの努力をしているようです.ユーザーがこの問題に直面すると、オプションはすでに存在し、説明ではこれが目的の動作を取得する方法であることをまったく示唆していません。
xfce4-terminal --help は、そのオプションが何をしているのではなく、そのオプションが存在することを示しています。
"man xfce4-terminal"は(今日まで)だけ言います:
--disable-server
Do not register with the D-BUS session message bus
何?