このスクリプトがansible Playbookによってコピーされ実行されたときにdoas -uで指定されたユーザーがこのスクリプトでこのコマンドを実行しないのはなぜですか?

このスクリプトがansible Playbookによってコピーされ実行されたときにdoas -uで指定されたユーザーがこのスクリプトでこのコマンドを実行しないのはなぜですか?

私は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。リモートホストが同じ部屋にあり、ユーザーアカウントでブラウザを表示できるため、リンクが開いていることがわかりますoumaimaoumaima 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転送を要求しない可能性があります。

関連情報