我想要做的是:能够在一个程序处于焦点时输入击键,但也可以将相同的击键发送到另一个屏幕上的第二个程序。
我尝试过的方法:xvkbd - 我尝试过多种使用方法,但似乎都不能满足我的需求。我研究过但做不到的方法:keyboardcast - 我无论如何也找不到源文件,而且到处都只有 deb 文件,没有 RPM。(我运行的是 Fedora 21)
实际应用:我打算使用它来同时在多个 EvE-Online 客户端中输入密码,这样登录我的帐户会更加简单。我已经有一个脚本,允许我在适当的显示器上同时启动它们(使用 wmctrl),但我仍然必须一次输入一个密码。由于我对所有 3 个都使用相同的密码,因此如果可能的话,克隆按键会更容易一些。
我在启动程序的脚本末尾写入 xvkbd -window $WID -text "REDACTED\r" 并使用 wmctrl 设置其位置(WID 的 windowid 是通过 wmctrl 检索的)取得了一些成功。
如果我使用这个脚本:
#!/bin/bash
WINEDEBUG=-all wine64 "/home/REDACTED/.wine/drive_c/Program Files/CCP/EVE/bin/exefile.exe" &
PID=$!
while [ "$WID" == "" ]; do
WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
wmctrl -i -r $WID -e 0,0,1680,1050 &&
sleep 2
xvkbd -window $WID -text "REDACTED"\r"
我可以成功自动完成登录过程。只需运行脚本即可打开游戏客户端,将其移动到我指定的任何显示器并调整其大小,然后等待 2 秒钟,然后通过 xvkbd 传输我的密码并登录。
我还成功地让脚本打开一个框让我输入密码,这样我的密码就不会保存在某个文件中。
但是,当我尝试使用两个客户端执行此操作时,它们都没有收到文本。如果我偏移两者的等待时间,即在创建窗口和使用 xvkbd 之间的等待时间,则只有等待时间较长的客户端会收到信息。
我认为这可能与窗口焦点有关,但让 wmctrl 将焦点设置到每个窗口 (wmctrl -a $WID),然后让 xvkbd 通过,似乎不起作用,如果我不偏移睡眠定时器,两个程序都无法获得它,如果我这样做,只有定时器较长的程序才能获得它。我尝试过将它们偏移 1 秒或 10 秒,结果都一样。
还有其他方法可以做到这一点吗?如果有,该怎么办?我的脚本中是否遗漏了某些内容?或者这根本就不可能?谢谢。
答案1
来源可以找到这里。
将包解压到/usr/local/src
:
tar -xvf keyboardcast_0.1.1.orig.tar.gz
cd keyboardcast-0.1.1/
make
su -
make install
可执行文件将被放置在/usr/local/bin
。