最近、私はこれをxset b off
私の.bashrcに入れました。これで、ttyやssh(Xセッションの外など)を介してログインしたときに表示されるエラーのため、迷惑になります。
私の最初の考えは[[ -z "$SOME_VAR" ]] && xset b off
(まあ、テスト結果が出てきた。変数が設定されていて空です。他の質問です。)しかし、どのSOME_VARが正しいですか?
そのため、Xで設定された変数とttyから欠落している変数を確認するために、set
ttyの出力をurxvtの出力と比較しました。set
予想通り、多くの違いがあります(私に関連する違いのみがリストされています)。
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
セッションXにあることをテストする最も正確で一般的な方法は何ですか?可能な限り多くのディストリビューション、プラットフォーム、およびデスクトップ環境で実行できるのですか?
それとも、環境変数をテストするよりも良い方法はありますか?
答え1
ディスプレイサーバーが利用可能で有効であることをテストする簡単で効果的な方法は、を使用することです。変数が無効な値に設定される可能性があるため、xhost
常に変数の値を調べることはできません。DISPLAY
if xhost >& /dev/null ; then echo "Display exists"
else echo "Display invalid" ; fi
crontab
私がこれを行う理由は、モニターがあるときはモニターで実行されますが、モニターがないときは動作が異なる複数のスクリプトがユーザーに実行されているためです。私の上部には変数がまだ存在していなくてもに設定crontab
しました。で始まるスクリプトは、モニターの有無にかかわらず起動されます。これにより、同じスクリプト内にディスプレイが表示され、消えるタイミングを動的に検出できます。DISPLAY
:0
crontab
@reboot
注:> = 4>&
でのみ利用可能です。bash
それ以外の場合> /dev/null 2>&1
答え2
DISPLAY
確認するのが最善の方法だと思います。
- リモートログイン(ssh -Xなど)を処理します。
- すべてではありませんが、ほとんどのプラットフォームで動作します。
- ウィンドウマネージャ/DEとは無関係です。
答え3
私は通常このTERM
変数を使ってスクリプトでXをテストします。
TERM
通常はlinux
TTYとxterm
Xに設定されます。
ここでは、GNU ScreenやTMuxなどのアプリケーションが変数を難読化しているように見えるため、「通常」という単語を使用しますTERM
。
答え4
一般的なbashスクリプトでは:if [[ $DISPLAY ]]
同じマシンでは、$DISPLAY
これは端末エミュレータに返されますが、0:0
実際の端末には何も返されません。 VSで簡単にCtrlAltF1テストできます。CtrlAltF7
bash
ベースの条件は$DISPLAY
次のとおりです。
if [[ $DISPLAY ]]; then
…
fi
または.profile
:.personal
if xhost >& /dev/null
私の経験では、$DISPLAY
実行または拡張時に設定されていません。このような状況では、.profile
.personal
ユーザーの回答 cmevoli
最高のサービス:
if xhost >& /dev/null; then
fi