명령이 스크립트 내에서가 아닌 프롬프트에서 실행되는 이유는 무엇입니까?

명령이 스크립트 내에서가 아닌 프롬프트에서 실행되는 이유는 무엇입니까?

나는 raspbian jessie를 실행하는 RPi를 가지고 있고 그것을 키오스크 모드에서 사용합니다./etc/rc.local

/usr/bin/xinit /opt/domotique/xinitrc > /root/xinitrc-errors 2>&1

그리고 /opt/domotique/xinitrc

date > /tmp/date.txt
export DISPLAY=':0'
xset s off
xset -dpms
xset s noblank
setxkbmap fr
/usr/bin/matchbox-window-manager -use_titlebar no -use_cursor no &
# wait for the window manager to start
sleep 10
rm -fr /root/.config /root/.cache
/usr/bin/firefox http://127.0.0.1:8081/infoscreen/infoscreen.html &
# let the browser start
sleep 10
/usr/bin/xte 'mousemove 10000 10000'
sleep 2
/usr/bin/xdotool key F11
date >> /tmp/date.txt
sleep 40000000

아이디어는 최소 창 관리자를 시작한 다음 Firefox를 시작한 다음 프로그래밍 방식으로 마우스를 멀리 이동하고 키를 눌러 F11전체 화면으로 이동하는 것입니다.

키가 "눌리지" 않은 것을 제외하면 모든 것이 잘 작동합니다 F11. Firefox와 해당 크롬만 남았습니다.

호스트에 SSH로 연결하고 루트 프롬프트에서 실행하는 경우

export DISPLAY=':0'
/usr/bin/xdotool key F11

그러면 Firefox가 전체 화면으로 올바르게 전환됩니다. 을 사용해도 마찬가지입니다 xte. 제어 파일에는 /tmp/date.txt두 개의 날짜 줄과 /root/xinitrc-errors.

이 이상한 행동의 이유는 무엇일까요?

답변1

~에서xdo 도구(1):

열쇠 [옵션] 키 입력 [키 입력...]

옵션:

--창 창

특정 창 ID로 키 입력을 보냅니다. 여기에서는 "%1" 및 "%@"와 같은 "WINDOW STACK" 참조를 사용할 수 있습니다. 창 스택이 존재하는 경우 기본값은 "%1"이고, 그렇지 않으면 현재 창을 사용합니다.

테스트 에서 sshFirefox 창에 초점을 맞춰서 키 누르기를 수신했습니다. 스크립트에서는 xte mousemove ...초점이 맞지 않습니다.

xdotool search다른 명령과 연결할 수 있습니다 . 검색 결과 firefox여러 창이 반환될 수 있습니다. 맨페이지에서는 --classname Navigator내가 테스트한 버전(47.0.1)에서 작동하는 example 을 사용합니다. 실패하면 xprop문제의 창과 관련된 다른 문자열 찾기를 사용할 수 있습니다.

 xdotool search --classname Navigator windowfocus key F11

답변2

스크립트의 첫 번째 줄에서 shebang을 시도해 볼 수 있습니다.

#!/usr/bin/env bash

관련 정보