작업 수행 시 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완료를 기다리고 있는 비동기 작업도 없습니다 wmctl(IPC가 관련되어 있지만 wmctl통신이 이미 완료되기 전에는 반환되지 않을 것 같습니다). 따라서 3초를 삽입하는 것은 sleep과도해 보입니다. sleep그래도 어느 정도는 불필요하다고 생각합니다 .

답변3

그것이 귀하의 문제인지는 모르겠지만 활성 창을 변경하는 것은 신뢰할 수 없습니다. 잠자는 동안 다른 무언가가 활성 창을 변경할 수 있습니다. 대신 xdotool원하는 창으로 키를 보내도록 지시해야 합니다 .

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

l0b0이 언급했듯이, 아마도 대신 사용해야 할 것입니다 google-chrome --kiosk ….

관련 정보