작업을 수행할 때 Bash 스크립트가 불확실합니다

작업을 수행할 때 Bash 스크립트가 불확실합니다

시스템이 부팅될 때(Ubuntu 10.04) "응용 프로그램 시작"을 호출하는 bash 스크립트가 있습니다.

스크립트:

#!/bin/sh

APP1='/home/ipc-display/development/projects/display-mgmt'
LOG='/home/ipc-display/development/projects/bootLog.txt'

cd $APP1/target/scala-2.10
java -jar display-mgmt-1.0.jar &

# Auto Hide Mouse Pointer
/usr/bin/unclutter &

#Start chrome
sleep 5s
/usr/bin/google-chrome --incognito --app=http://192.168.0.100:9000/welcome &

#Bring Chrome to focus
sleep 5s
/usr/bin/wmctrl -a "http://" && 

#FullScreen Chrome
sleep 3s &&
/usr/bin/xdotool key F11

bash

내 형편없는 스크립팅 능력은 제쳐두고, Chrome이 내가 원하는 만큼 결정론적으로 항상 전체 화면으로 전환되지 않는 이유에 대한 아이디어가 있습니까?

때로는 전체 화면으로 표시되지만 항상 그렇지는 않은 이유가 무엇인지 궁금해 머리를 긁적입니다. 그런데, 이 스크립트에 대한 개선 사항이 있으면 크게 감사하겠습니다.

감사해요.

답변1

타이밍 문제로 인해 이 문제가 발생한 것 같습니다. Chrome에 초점을 맞춘 후 를 누르는 사이 3초 동안 무언가가 전면에 나타날 수도 있습니다 F11.

그것이 어떻게 작동하는지 잘 모르겠지만 줄 끝에서 사용하는 것이 wmctrl약간 부적절해 보입니다. &&이는 프로세스를 백그라운드로 수행하지는 않지만 sleep 3s명령이 성공할 경우에만 다음 명령을 실행하도록 셸에 지시합니다( ).

그러나 --kiosk시작 시 Chrome을 전체 화면으로 설정하고 나머지 스크립트를 건너뛸 수 있습니다.

답변2

sleep귀하의 스크립트는 좋아 보이지만 스크립트에 너무 많은 호출을 삽입할 필요는 없다고 생각합니다 . 사람들은 종종 sleep일부 비동기 작업의 완료 여부를 확인할 수 없어 발생하는 경쟁 조건을 해결하기 위해 이를 사용합니다 . 예를 들어, wget원격 스크립트 실행을 시작하고 서버가 따를 수 있는 파일을 생성할 때까지 충분한 시간을 기다리는 것은 파일이 언제 준비될지 알지 못하는 상황을 피하는 GET데 사용될 수 있습니다 . sleep약간 투박하지만 대부분의 사람들의 요구를 충족할 것입니다.

하지만 sleep당신을 여기 데려와도 소용없어요 . 예를 들어, chrome먼저 시작해서 unclutter그 일을 할 수 있는 기회가 있었다면 큰 해를 끼칠 것이라고 생각하지 않습니다 . 또한 완료를 기다리는 비동기 작업도 없으므로 (글쎄, IPC가 관련되어 있지만 통신이 완료될 때까지 반환되지 wmctl않을 것 같습니다 ) 3초를 삽입하는 것은 과도해 보입니다. 하지만 금액은 필요하지 않다고 생각합니다.wmctlsleepsleep

답변3

이것이 귀하의 문제인지는 모르겠지만 활성 창을 변경하는 것은 신뢰할 수 없습니다. 잠자는 동안 다른 무언가가 활성 창을 변경할 수 있습니다. 대신 xdotool원하는 창으로 키가 전송되도록 알려주셔야 합니다 .

xdotool search --class Google-chrome -- key F11

l0b0이 말했듯이, 아마도 대신 사용해야 합니다 google-chrome --kiosk ….

관련 정보