インターネットページでヘッドレススクリプトランチャーを実行するためにテキストブラウザを使用するRaspbian

インターネットページでヘッドレススクリプトランチャーを実行するためにテキストブラウザを使用するRaspbian

私は新しいLinuxユーザーと中級ユーザーの間にいます。

グループのローカルネットワークを設定していてインターネット接続が失われた場合は、ポータルに自動ログインを設定する必要があります。

Raspberry Pi(RASPBIAN OS)自体のモニターを使用してbashスクリプトを実行すると、機能し、順序は次のようになります。

fpingを使用してインターネットがダウンしていることを確認してください - > xtermを開く - > xdotoolがw3mを開くようにし、自動的にクリックしてパスワードを入力します。

圧縮形式のコードは次のとおりです。

    DNSPing=$(fping 9.9.9.9)
EtecsaPing=$(fping 10.180.0.30)
...
if [[  ( $EtecsaPing == "10.180.0.30 is alive" ) && ( $DNSPing == "9.9.9.9 is unreachable" ) ]]
then
echo "ETECSA UP - Internet all down - Run login script now"

xterm &
sleep 2
xdotool type "w3m -m https://10.180.0.30:8443/"
xdotool key Return
...
xdotool type <USER>
xdotool key Return
xdotool sleep 1
...
xdotool key Return
xdotool type <PASSWORD>
xdotool sleep 1
...
xdotool key Return

sleep 5

killall xterm

fi

だからモニターとマウスを接続して実行してみるとうまくいきましたね。

私はこれをヘッドレスで実行し、crontabでスクリプトを使用したいと思います。 2日間試した後は、ただ円を描いて行っているように感じられます。

問題は、新しいxtermセッションとxdotoolの両方を実行するにはDISPLAYを定義する必要があることです。

そのために、シミュレートされたディスプレイを生成するxvfbをインストールしました。

sudo Xvfb :10 -ac -screen 0 1024x768x24
DISPLAY=:10 xterm & (the script from above)

エラーなしで実行されますが、機能しません。

私が実行した場合:

 sudo Xvfb :10 -ac -screen 0 1024x768x24
 DISPLAY=:10 xterm -e "echo 'deb blah ... blah' | sudo tee -a /CronJobs/yap.txt > /dev/null"

ファイルにエコーを追加することで、私のモニターがxtermセッションを実行していることがわかり、エミュレートされたモニターとxtermセッションの両方が正しく機能していると結論付けることができます。

私がするなら:

sudo Xvfb :10 -ac -screen 0 1024x768x24
DISPLAY=:10 xterm &
DISPLAY=:10 xdotool type "sudo echo 'deb blah ... blah' | sudo tee -a /CronJobs/yap.txt > /dev/null"
DISPLAY=:10 xdotool key Return

これはうまくいきません。

要約すると、xdotoolは機能しますが(エラーなし)何もしません!

だから私はウィンドウが選択されていないので、xdotoolがxterm端末に入らないと思い、xtermウィンドウを選択しようとしましたが、次のような結果が出ました.

DISPLAY=:10 xdotool getactivewindow
Your windowmanager claims not to support _NET_ACTIVE_WINDOW, so the attempt to query the active window aborted.
xdo_get_active_window reported an error

現時点では、私のプロジェクトがあまりにもユニークで何をすべきかについての良い提案を見つけることができません。 windowmanagerをXvfdに置き換えようとしたが、その回数は非常に少なかった。

簡単に言うと:

  • Xvfdが実際のモニタのようにうまく機能するようにするにはどうすればよいですか?

  • Linuxでは、すべてのDISPLAY変数とウィンドウマネージャを忘れ、無条件に通常のユーザーとしてスクリプトを実行できますか?どのように?

  • xdotoolを使用しないように、よりスマートな方法でログインシーケンスを自動化できますか?

私のネットワークはプライベートで、ラズベリーパイのセキュリティを損なう可能性があるソリューションには問題がないので、xhostなどを無効にしても大丈夫でしょう。どうやって何がわかりません。

よろしくお願いします。

ベストアンサー1

私はFosforoが私に問題に対するいくつかの解決策を試すようにインスピレーションを与えたので、私自身の質問に答えています。


現在アクティブなプログラムスイートを使用すると、ウィンドウの操作xvfbには使用できませんxdotool

xdotoolそれでも情報を入手できます。たとえば、次を実行してxtermウィンドウのPIDを見つけることができます。

DISPLAY=:10 xdotool search --name "xterm"

あなたの場合、アクティブなxtermセッションのPIDは2097165です。

通常、次のようにウィンドウをアクティブにできます。

DISPLAY=:10 xdotool windowactivate 2097165

しかし、これを実行すると、xvfb次のエラーが返されます。

Your windowmanager claims not to support _NET_ACTIVE_WINDOW, so the attempt to activate the window was aborted.
xdo_activate_window on window:2097165 reported an error

したがって、フォーカスを積極的に操作することはできません。DISPLAY次のコマンドを実行してデフォルトのフォーカスを見つけることができます。

DISPLAY=:10 xdpyinfo | grep focus

これにより、次の通知が送信されます。

focus:  PointerRoot

フォーカスは、PointerRoot入力したすべての内容がカーソル付きのウィンドウに入力されることを意味します。

以前のPIDでは、次のコマンドを実行してxtermウィンドウの位置とサイズをすばやく見つけることができます。

DISPLAY=:10 xwininfo -id 2097165

これは次のことを伝えます。

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 484
  Height: 316
...

以下を使用して、xdotool同様にマウスの位置を取得できます。

DISPLAY=:10 xdotool getmouselocation

これはマウスの位置がどこにあるかを知らせます。

x:512 y:384 screen:0 window:904

つまり、マウスがxtermウィンドウの上にないため、xdotoolタイプを使用して入力した内容はxtermウィンドウに表示されません。

2つの非常に単純な解決策があります。

  • マウスの移動
  • xtermウィンドウを大きくする

2番目のオプションは、起動時に画面の解像度を知って制御できるため、xvfb最も簡単です。

-geometryxtermの起動パラメータを追加すると、次のようになります。

sudo Xvfb :10 -ac -screen 0 1024x768x24
DISPLAY=:10 xterm -geometry 1024x768+0+0 &

これにより、xtermウィンドウがフルサイズで表示され、マウスがウィンドウの上にあり、キーやxdotoolタイプなどのコマンドが機能していることが確認されます。

-geometryつまり、xtermにパラメータを追加することはあなたの質問に答えることです。

おすすめ記事