У меня есть bash-скрипт, который я вызываю при загрузке системы (Ubuntu 10.04) «Автозагрузка приложений».
сценарий:
#!/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 и нажатием F11.
Я не уверен, как это wmctrl
работает, но кажется немного нелогичным, что вы используете &&
в конце этой строки. Это не откладывает процесс в фоновом режиме, а скорее указывает оболочке выполнить следующую команду ( sleep 3s
) только в случае успешного выполнения команды.
Однако вы можете просто использовать --kiosk
полноэкранный режим Chrome при запуске и пропустить остальную часть скрипта.
решение2
Ваш скрипт выглядит хорошо, но я не думаю, что вам нужно вставлять sleep
в него так много вызовов. Люди обычно используют его, sleep
чтобы обойти состояния гонки, вызванные невозможностью определить завершение какой-либо асинхронной задачи. Например, выполнение , wget
чтобы запустить удаленное выполнение скрипта и подождать достаточно времени, чтобы сервер сгенерировал файл, который они могут обработать GET
, вы, вероятно, использовали бы его, sleep
чтобы обойти незнание того, когда этот файл будет готов. Это немного неуклюже, но это работает для того, что нужно большинству людей.
Хотя ваши sleep
' здесь на самом деле не имеют смысла. Например, я не думаю, что будет много вреда, если chrome
запустится до того, как unclutter
успеет сделать свое дело. Также нет асинхронной задачи, которую вы ждете завершения wmctl
(ну, IPC задействован, но я не думаю, что wmctl
он вернется, пока связь не завершится), поэтому вставка трех секунд sleep
кажется излишней. Хотя я бы подумал, что любое количество sleep
будет излишним.
решение3
Я не знаю, в этом ли ваша проблема, но смена активного окна ненадежна: что-то еще может изменить активное окно во время вашего сна. Вместо этого вы должны сказать, xdotool
чтобы отправить ключ в нужное окно.
xdotool search --class Google-chrome -- key F11
Как заметил l0b0, вам, вероятно, следует использовать google-chrome --kiosk …
вместо этого.