기본적으로 저는 SSH 세션을 통해 원격으로 이 스크립트를 실행하고 있습니다. Linux Mint에서는 잘 실행되지만 Debian(7.5)에서는 실행되지 않습니다. 내보내기 표시나 nohup 명령이 작동하지 않는 것 같은데 어떻게 테스트해 보아야 할지 모르겠습니다. 누구든지 이것의 문제점을 볼 수 있습니까?
#!/usr/bin/env bash
mount -t cifs //10.50.18.114/Presentation -o 'username=Administrator,password=***,sec=ntlm' /mnt/share
pkill soffice.bin
cp -v /mnt/share/Pres.ppt /home/kyle/Documents
chmod 777 /home/kyle/Documents/Pres.ppt
export DISPLAY=":0"
nohup libreoffice --norestore --nolockcheck --show /home/kyle/Documents/Pres.ppt &
sessionid="$(pidof -s sshd)"
kill $sessionid
exit
편집: 이것은 제공된 "중복" 링크에 표시된 질문과 다릅니다. 해당 스레드의 정보를 사용했지만 작동하지 않았습니다.
의견에 대한 답변: 두 대의 별도 컴퓨터가 있습니다. 위 스크립트는 데모 PC에 로컬로 저장됩니다. SSH를 통해 원격으로 이 스크립트를 실행하고 있습니다. 각 단계 사이에 echo 명령을 배치했는데 끝까지 실행되는 것처럼 보이지만(실제로는 kill sessionid를 주석 처리했습니다.) 프레젠테이션이 내 PC에 표시되지 않습니다. 루트로 로컬에서 실행하면 스크립트가 작동합니다(mount 명령을 사용하려면 루트가 필요함).
내가 보는 유일한 오류는 다음과 같습니다.
(soffice:3747): GConf - 경고**: 클라이언트가 D-BUS 데몬에 연결할 수 없습니다. 응답을 받지 못했습니다. 가능한 이유는 다음과 같습니다: 원격 애플리케이션이 응답을 보내지 않았거나, 메시지 버스 보안 정책으로 인해 응답이 차단되었거나, 응답 시간이 초과되었거나, 네트워크 연결이 중단되었습니다. GConf 오류: D-BUS 데몬이 실행되고 있지 않습니다.
그러나 로컬로 실행하든 SSH를 통해 실행하든 이 오류가 발생하므로 이것이 문제라고 생각하지 않습니다. 나는 여전히 이것이 EXPORT 및 nohup 명령의 문제라고 생각하지만 이 문제를 효과적으로 해결하는 방법을 모르겠습니다.
편집 2: "kyle" 계정을 사용하여 SSH를 사용하면 실제로 작동하지만 루트를 사용하여 SSH를 통해 연결하면 "kyle"의 로컬 디스플레이에 연결할 수 없는 것 같습니다. 이는 다른 사용자 이름이기 때문입니다. 나는 해결책을 찾으려고 노력할 것입니다.
답변1
그래픽 세션에서 원격으로 프로그램을 시작하려면 다음보다 더 많은 설정이 필요합니다.전시하다환경 변수. 최소한 설정해야 합니다.권한그리고DBUS_SESSION_BUS_ADDRESS. 가장 잘 설정된 다른 변수는 XDG_* 변수입니다.XDG_RUNTIME_DIR,XDG_SEAT등.
다음 명령을 실행하여 해당 값을 확인할 수 있습니다.
PID_OF_SOME_GUI_PROGRAM=`pidof soffice.bin` # before you pkill it
strings /proc/${PID_OF_SOME_GUI_PROGRAM}/environ | grep XAUTHORITY
XFCE를 사용하는 경우 다음을 수행할 수도 있습니다.
PID_OF_SOME_GUI_PROGRAM=`pidof xfce4-session`
(GNOME의 경우 아마도 그렇습니다 gnome-session
)
답변2
"EDIT 2"에서 찾은 정보를 바탕으로 스크립트의 마운팅 부분을 별도로 실행하기 위해 plink를 사용하기로 결정했습니다. plink는 시스템에 대해 3가지 다른 SSH 연결을 만듭니다. 1. 자동으로 지문을 허용합니다. 2. 루트로 공유를 마운트합니다. 3. 표준 사용자로 기본 스크립트를 실행하여 프레젠테이션을 복사하고 시작합니다.
Windows 측의 plink 스크립트는 다음과 같습니다.
echo y | plink -ssh [email protected] "exit"
plink -ssh [email protected] -pw password /home/kyle/Desktop/mount.sh
plink -ssh [email protected] -pw kyle /home/kyle/Desktop/restart-pres.sh
이것이 가장 효율적인 솔루션은 아닐 수도 있지만 제 상황에는 효과적입니다.