別のXセッションで開いているウィンドウにキーストロークを送信するコマンドラインの方法


11

メインマシンで、Ubuntuデスクトップを開いてログオンしています。次に、新しいXセッションを作成するX2goを使用して、リモートコンピューターからこのマシンにログインします。元のセッションで libreofficeファイルを開いています。このファイルを保存して閉じたいのですが、リモートマシンからです!(両方のセッションで同じユーザーがログインしています。必要に応じてsudoを実行できます)

使ってみxdotool searchましたが、ウィンドウが見つかりません。この2番目のセッションからやりたいことを行う方法はありますか?私はでプロセスをps -A 見ることができますlsof!どうすれば「保存して閉じる」ことができますか?


2
プロセスを強制終了することもできます-保存されていない重大な変更がない場合、これは簡単です。その場合でも、次にドキュメントを開いたときに、ドキュメントの回復が試行されます。
ウェインヴェルナー

それは本当の@wayneです、おそらく自動回復します...提案をありがとう。私がそのチャンスを取りたかったのかどうかわからない!キープレス(または他のダイレクトメッセージ)を送信する方法はありませんか?とてもシンプルに聞こえます。
Sanjay Manohar

私は方法があると確信しています-私はそれらに気づいていません。いくつかの複雑なものは、単純なVNCクライアントのインストールと設定DISPLAY=:0(または他のアカウントがオンになっているディスプレイ)を含み、サーバーを起動してクライアントからアクセスします。しかし、それは過剰かもしれません。LibreOfficeにはメッセージプロトコルがある可能性があります。Vim(LaTexを含む)でGoogleドキュメントまたはプレーンテキストファイルを使用しているため、あまり慣れていません...
Wayne Werner

VNCを使用して別の場所からメインウィンドウにアクセスする
Olivier Dulac

1
xdotoolは現在のセッションの$ DISPLAY値で実行されます。任意のマシンまたはvncserverをsshしてから、そのマシンでxdotoolを実行できます。たとえば、ポート5901でvncserverを実行する場合、慣例では:1画面を使用します。したがって、実行してDISPLAY:1からXプログラム(テスト用のxeyes)を起動し、VNCで実行します。同じことがリモートvncserversにも当てはまります。マシンにSSHで接続し、使用する前に単純にexport DISPLAY:1を実行します。
m3nda

回答:


9

デフォルトの構成を想定すると、 "original"のxdpyinfoは ":0.0"の表示を示します。

xdpyinfo | grep name

「x2go」のDISPLAY環境変数が「:1.0」の場合、そうである必要があります。

「x2go」の端末からwindow-idを見つけてみてください。

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

アクセス制御が機能しないように設定されている可能性がありますが、同じホスト上の同じユーザーID(つまり、〜/ .Xauthorityへのアクセス)であれば、そうする必要があると思います。アクセスがない場合は、「xauth list」の出力を確認してください。

機能する場合は、お気に入りのツールを使用して制御します。上記のxwininfoに "-int"を追加して、ウィンドウIDを10進数で出力します(ツールで必要な場合)。

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

または、「ctrl + s」/「ctrl + q」の代わりに、これらの方が運が良いかもしれません

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

「meta +」の代わりに「alt +」が必要な場合があります。私には非標準のmeta / alt / superマッピングがあります。Xnestを使用してテストしたメタは私にとっては動作します。私は変更されていない英語のメニューレイアウトとアクセラレータを想定しています。

途中でポップアップが表示される可能性があります。その場合は試してみる価値があります。

xdotool key "Escape"

数回、保存して閉じます。xdotoolは、「キー」名の正確な大文字と小文字の区別については面倒です。

x2goでlibreofficeを起動し、DISPLAYを変更しないことで、これらすべてを試すことができるはずです。フォーカスの変更で混乱しないように、コマンドをシェルスクリプトファイルに保存する必要があります。

lsofは、正常に機能した場合、開いていないファイルを表示するはずです:-)


xdotool key "Escape"名前についてのヒントをありがとう、しかし長い名前は試していない:D
m3nda

1

考えられる要件がいくつかあるようです。明らかに、ホストはxhostsファイル(回答としてマークされていました)にあり、適切なDISPLAY値がエクスポートされている必要があります。ここのこの投稿は、xdotoolがリモートのx11ウィンドウを見つけることができるように、あなたが望む方法でそれを行うのに役立つはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.