나는 open-links.yml
원격 호스트 중 하나에서 실행되도록 설계된 간단한 스크립트를 작성했습니다.
- 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 모니터를 사용하려면 일반적으로 두 가지가 필요합니다.
- 사용하려는 디스플레이에 대한 유효한 세션 쿠키가 포함된 Xauthority 파일(
~/.Xauthority
또는 환경 변수가 가리키는 파일 )XAUTHORITY
DISPLAY
사용하려는 디스플레이를 지정하는 환경 변수 .
클라이언트의 로컬 화면을 사용하여 SSH 세션을 실행하는 xauth
경우 .sshd
X11 프로그램을 원격으로 실행하고 다음 DISPLAY
과 같이 설정하면:0
원격 시스템에 직접 연결된 모니터, 이는 시스템을 광고판으로 사용하는 경우 유용할 수 있지만 즉시 표시되지 않을 수 있습니다. 성공하려면 X11 프로그램을 실행하는 데 사용하는 사용자 계정으로 원격 시스템에 로그인된 GUI 세션이 이미 설정되어 있어야 하며 Xauthority 파일이 존재하고 최신 상태여야 합니다.
Ansible이 SSH를 사용하는 경우 명시적으로 구성하지 않는 한 기본적으로 X11 전달을 요청하지 않을 수 있습니다.