Я использую Cheese в качестве программного обеспечения для веб-камеры. Я пытаюсь найти способ сделать так, чтобы:
- Начинать
- Нажмите на картинку
- Выход
когда скрипт выполняется. Скрипт не должен запрашивать разрешения и не должно быть никаких прерываний. Пока что,
#!/bin/bash
cheese
Я смог заставить его выполнить только шаг 1. Как мне выполнить шаги 2 и 3? В файлах документации такая опция не упоминается, а я не хочу менять исходный код. (Я также не против каморамы)
решение1
Вуаля! Далее следуют шаги 2 и 3:
Это работает, хотя и крайне критично по времени, корректируйте по своему усмотрению, постарался прокомментировать это как следует, чтобы вы могли видеть, что происходит.
Вам нужно будет установитьxdotoolчтобы это работало, так как мы имитируем нажатия клавиш для создания снимка и выхода (пакет 'xdotool')
О, и вам нужно будет выключить 'обратный отсчет' в настройках, в противном случае он, скорее всего, выйдет из программы по нажатию CTRL-Q (выход) еще до того, как она действительно сделает снимок.
#!/bin/bash
#
# L Nix <[email protected]>
# takeapic : take a photo with Cheese, using default settings, then exit
#
# start cheesing (2> because mine whines about cheesy stuff (ha!))
cheese 2>/dev/null &
# give WM some time to start up program (fails without this)
sleep 5
# set so we can determine if valid window(s) exist(s)
WINDOWIDS=""
# wait for up to 90 seconds (tweak this)
COUNTDOWN=90
while [ ${COUNTDOWN} -gt 0 ]; do
WINDOWIDS=$(xdotool search --class "cheese" 2>/dev/null)
if [ -n "${WINDOWIDS}" ]; then
break
fi
sleep 1
COUNTDOWN=$(( ${COUNTDOWN} - 1 ))
done
# did we get anything?
if [ -z "${WINDOWIDS}" ]; then
echo "Cheese never started, something's wrong"
exit 1
fi
# the shutter button is ALT-T
for WIDS in ${WINDOWIDS}; do
# if you combine these like xdotool allows, it fails
xdotool windowfocus ${WIDS} 2>/dev/null
xdotool key alt+t 2>/dev/null
done
# pause a moment while taking photo
sleep 1
# now CTRL-Q out of the application
for WIDS in ${WINDOWIDS}; do
xdotool windowfocus ${WIDS} 2>/dev/null
xdotool key ctrl+q 2>/dev/null
done
#