Как заставить xdotool работать с matchbow-window-manager?

У меня проблемы с использованием xdotool для имитации простых нажатий клавиш в моем браузере.

Теперь мой браузер запускается при загрузке, добавив следующий код в /home/pi/.xintirc

#!/bin/sh
xset -dpms
xset s off
xset s noblank

// not sure if this is needed.
killall -TERM matchbox-window-manager 2>/dev/null;
killall -9 matchbox-window-manager 2>/dev/null;

exec matchbox-window-manager -use_titlebar no &
iceweasel [someURL]
python /etc/xdo_test.py

Мой /etc/xdo_test.py выглядит следующим образом:

import time
import subprocess

time.sleep(20)
subprocess.call(["xdotool", "key", "c"]);

У меня нет вывода этого файла при использовании его при запуске, но если я исключаю это в другой консоли, я получаю следующий вывод:

Error: Can't open display: (null)
Failed creating new xdo instance

У кого-нибудь есть идея, почему я получаю эту ошибку и как ее решить?

3 ответа

Решение

Я получил это на работу. В конце концов я нашел этот урок и использовал некоторые идеи из него. Я опубликую решения для людей, у которых может быть подобная проблема.

Вот что я разместил в файле /home/pi/.xinitrc:

#!/bin/sh
xset -dpms
xset s off
xset s noblank

// not sure if this is needed.
killall -TERM matchbox-window-manager 2>/dev/null;
killall -9 matchbox-window-manager 2>/dev/null;

exec matchbox-window-manager -use_titlebar no &
iceweasel [someURL] &
sudo /etc/xdo_test.sh

Я изменил скрипт Python на скрипт оболочки и вставил следующий код:

sleep 20
$WIN=$(xdotool search --onlyvisible --class Iceweasel|head -1)
xdotool key --window $WIN c

while:
do
    sleep 300
done

Цикл while в конце - это то, что я добавил, потому что Xserver зависал с момента, когда он потерял связь со сценарием. Я все еще ищу более чистое решение для завершения сценария, но пока это работает. Я обновлю это сообщение, когда найду его.

Спасибо Себастьян Стиглер за помощь!

Вызовите xdo_test.sh перед запуском оконного менеджера

Вы используете в скрипте Python subprocess.call команда. Этот вызов не устанавливает текущие переменные среды в подпроцессе. Отсюда и отсутствующий дисплей. Просто вызовите команду xdotool в .xinitrc файл напрямую.


#!/bin/sh
xset -dpms
xset s off
xset s noblank

// not sure if this is needed.
killall -TERM matchbox-window-manager 2>/dev/null;
killall -9 matchbox-window-manager 2>/dev/null;

exec matchbox-window-manager -use_titlebar no &
iceweasel [someURL] &           #<--- add ampersand
sleep 20
# you have to determine the window to which you want to send the keystroke
WIN=`xdotool search --sync --onlyvisible --class iceweasel | head -1`
# then activate it
xdotool windowactivate $WIN
# and send the keystroke
xdotool key --window $WIN c

Если у вас есть проблемы с амперсандом в iceweasel позвоните, попробуйте поставить кавычки вокруг URL.

Другие вопросы по тегам