如何使 xdotool 与 matchbow-window-manager 一起工作?
How to make xdotool work with 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
有谁知道为什么我会收到此错误以及如何解决它?
您在 python 脚本中使用了 subprocess.call
命令。此调用不会在子进程中设置当前设置的环境变量。因此缺少显示。直接调用.xinitrc
文件中的xdotool命令即可。
#!/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.
周围加上引号
我让它工作了。我最终找到了 this 教程并使用了其中的一些想法。我会 post 为可能有类似问题的人提供解决方案。
这是我放在 /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 从与脚本失去连接的那一刻起就崩溃了。我仍在寻找一种更简洁的解决方案来结束脚本,但目前有效。当我找到一个时,我会更新这个遮阳篷。
感谢塞巴斯蒂安·斯蒂格勒的帮助!
在 运行 window 经理
之前致电 xdo_test.sh
我在使用 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
有谁知道为什么我会收到此错误以及如何解决它?
您在 python 脚本中使用了 subprocess.call
命令。此调用不会在子进程中设置当前设置的环境变量。因此缺少显示。直接调用.xinitrc
文件中的xdotool命令即可。
#!/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.
我让它工作了。我最终找到了 this 教程并使用了其中的一些想法。我会 post 为可能有类似问题的人提供解决方案。
这是我放在 /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 从与脚本失去连接的那一刻起就崩溃了。我仍在寻找一种更简洁的解决方案来结束脚本,但目前有效。当我找到一个时,我会更新这个遮阳篷。
感谢塞巴斯蒂安·斯蒂格勒的帮助!
在 运行 window 经理
之前致电 xdo_test.sh