ユーザーのデスクトップがスクリプトから読み込まれるタイミングをどのように検出しますか?

ユーザーのデスクトップがスクリプトから読み込まれるタイミングをどのように検出しますか?

bashに実装されたデーモンがあり、非アクティブなデスクトップを表示し、cronオプションを使用して実行します。@rebootスクリプトは次のとおりです(テスト目的で非常に短い)。

#!/bin/bash
P_STATE=0
while :
do
    sleep 5
    if [ $P_STATE == 0 ]; then
         [ `xprintidle` -ge 25000 ] && P_STATE=1 && wmctrl -k on
    else
         [ `xprintidle` -le 25000 ] && P_STATE=0
done

問題:たとえば、ユーザーがまだログイン画面にあり、デスクトップがxprintidleまだwmctrlロードされていないためにログインが失敗した場合です。これを防ぐために、スクリプトの先頭に次の行を入れました。

while:
do
    sleep 10s
    [ -n `who | grep "$USER"` ] && break
done

したがって、スクリプトは、ユーザー(USER変数はcrontabファイルに自分のユーザー名に設定されている)が書き込まれるのを待ちます。ただし、ユーザーがターミナルセッション(KDEやGNOMEなどのグラフィックセッションとは反対)を開始しても、スクリプトは続行されます。

ユーザーがすでに「デスクトップモードを表示」できる「グラフィックス」セッションにあるかどうかを確認する方法は?また、「グラフィックス」セッションが完全にロードされたがロードされていないことを確認するにはどうすればよいですか?

私の解決策:grep私の(非公式)解決策は、メインループに次の行を追加することでした:

WAIT_TIME=180

while:
do
    sleep $WAIT_TIME

    [ ! -n "`ps -ef | grep "$WM_CMD" | grep -v "grep"`" ] && continue

    ## My actions here
done

「$WM_CMD」の対象になりましょうウィンドウマネージャコマンド。私はウィンドウマネージャコマンドこれは、デスクトップが完全にロードされ、すべての「グラフィックス」コマンドが正常であることを意味します。

WM_CMD変数はどこで定義されていますか?ラインからcrontab

 @reboot DISPLAY=:0 WM_CMD=/usr/bin/gnome-shell exec script_path/myscript.sh &> /dev/null

しかし、「Windows管理者コマンド」は、他のシステム要求を介しても検出できると思います。しかし、私にとっては、crontabファイルにWM_CMDを定義するだけで十分です。

ベストアンサー1

logindD-Busを使用してサービスからセッション情報を照会します。などorg.freedesktop.login1.Managerのさまざまな信号へのインターフェースがあります。そしてインターフェイス。セッション/座席/ユーザーのステータスを取得するのに役立ちます。SessionNewSeatNeworg.freedesktop.login1.Seatorg.freedesktop.login1.User

おすすめ記事