私はopen-links.yml
リモートホストの1つで実行するように設計された単純なスクリプトを書いています。
- name: Run Bash script
hosts: myhosts
gather_facts: false
vars:
au: "j"
tasks:
- name: Copy and run a script that opens a link
script: /home/{{ au }}/CS/SoftwareDevelopment/MySoftware/Bash/ansible/open-links.sh
open-links.sh
ブラウザでリンクを開くスクリプトです。
#!/usr/bin/bash
# Link to open
link_to_open="https://calendar.google.com/calendar/u/0/r"
doas -u oumaima echo "From ${0}, $(whoami): It works, doesn't it"|tee ~/debug.log
doas -u oumaima brave-browser "${link_to_open}" > /dev/null 2>&1 &
#doas -u oumaima DISPLAY=:0 brave-browser "${link_to_open}" > /dev/null 2>&1 &
#doas -u oumaima DISPLAY=:0.0 brave-browser ${link_to_open} > /dev/null 2>&1 &
#neither of these two work, whatever the value of DISPLAY
実行すると、ansible-playbook -u root -i inventory.ini open-links.yml
次のような出力が提供されますが、
PLAY [Run Bash script] **********************************************************************************
TASK [Copy and run a script that opens a link] ***********************************************************
changed: [fe80::cc08:9465:8dba:15a9%wlp4s0]
PLAY RECAP **********************************************************************************************
fe80::cc08:9465:8dba:15a9%wlp4s0 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
リンクが開いていません。debug.log
場所は、/root/
内容は、 実際From /root/.ansible/tmp/ansible-tmp-1702325377.165474-2513875-125933755232488/open-links.sh, root: It works, doesn't it
にどんなリンクでも開くと、おそらくそのようなことが起こるという事実がすべて私に教えてくれますroot
。 SSHを使用してリモートホストにログインして手動で実行する場合
link_to_open="https://calendar.google.com/calendar/u/0/r"
doas -u oumaima brave-browser "${link_to_open}" > /dev/null 2>&1 &
これにより、ブラウザはユーザーに指定されたリンクを開きますoumaima
。リモートホストが同じ部屋にあり、ユーザーアカウントでブラウザを表示できるため、リンクが開いていることがわかりますoumaima
。oumaima GUIで何が起こったのかを私のコントロールステーションに渡すことは私が望むものではなく、この質問の範囲外です。リンクを開いてみたいです。 ansible-playbook -u root -i Inventory.ini open-links.ymlを使用してスクリプトを実行すると、なぜこれが起こらないのですか?
リモートホストへの非ルートログインを許可し、oumaima
次のようにプレイブックを実行すると、この問題を解決できることがわかりますansible-playbook -u oumaima -i inventory.ini open-links.yml
。これらのソリューションはこの質問の範囲外です。プレイブックをroot
。
主催者紹介:私のコンソールと同じ部屋、同じLAN上のラップトップ。コンソールとリモートホストのUbuntu Desktop 22.04 LTS。
答え1
X11モニタを使用するには、通常2つのことが必要です。
- 使用するディスプレイの有効なセッションCookieを含むXauthorityファイル(
~/.Xauthority
または環境変数が指すファイル)XAUTHORITY
DISPLAY
使用するディスプレイを指定する環境変数。
クライアントのローカル画面を使用してSSHセッションを実行しているxauth
場合。sshd
X11プログラムをリモートで実行し、次DISPLAY
のように設定すると:0
リモートシステムに直接接続されたモニター、これはシステムをビルボードとして使用する場合に便利ですが、すぐには表示されない場合があります。成功するには、X11プログラムの実行に使用するユーザーアカウントで、リモートシステムにログインしているGUIセッションがすでに確立されている必要があり、Xauthorityファイルが存在し、最新の状態である必要があります。
AnsibleがSSHを使用している場合、明示的に設定しない限り、デフォルトでX11転送を要求しない可能性があります。