如何让xdotool与matchbow-window-manager一起工作?

时间:2015-05-18 14:12:03

标签: linux raspbian xdotool iceweasel

我无法使用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 个答案:

答案 0 :(得分:0)

您在python脚本中使用.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 文件中调用xdotool命令即可。

iceweasel

如果您在AssetManager来电中遇到&符问题,请尝试在网址旁边添加引号。

答案 1 :(得分:0)

我得到了它的工作。我最终找到了this教程并使用了它的一些想法。我会为可能遇到类似问题的人发布解决方案。

这是我放在/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脚本更改为shell脚本并插入以下代码:

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

while:
do
    sleep 300
done

最后的while循环是我添加的东西,因为Xserver从失去与脚本的连接的那一刻起就崩溃了。我仍然在寻找一个更简洁的解决方案来结束脚本,但现在这样做。当我找到一个时,我会更新这个芒果。

感谢Sebastian Stigler的帮助!

答案 2 :(得分:0)

在运行窗口管理器之前调用xdo_test.sh