시스템 부팅(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 …
.