我想添加命令scrot-s作为自定义快捷方式gnome 控制中心键盘。加速键是 Super+S。
但它不起作用。
如果我删除-s或尝试其他交互式命令,例如杀戮,他们工作得很好。
还,scrot -e 'mv $f ~/图片/scrot/'也很好用。
所以我的问题是,为什么scrot-s不起作用,我该如何修复它。
我的发行版是 fedora 21,gnome 版本是 3.14.2,scrot 版本是 0.8
[更新] gnome 屏幕截图 -a也失败了。
[更新2]默认快捷方式“将区域的屏幕截图保存到图片”工作正常,但我仍然很好奇为什么当我将其设置为自定义快捷方式时它不起作用。
[更新3]
以下是自定义快捷命令的错误日志结果strace -v -s 1000000 -o /tmp/gnomescr.log gnome-screenshot -a
:
$ grep -ni CRITICAL /tmp/gnomescr.log
2660:write(2, "\n(gnome-screenshot:8700): Gdk-CRITICAL **: gdk_pixbuf_get_from_surface: assertion 'width > 0 && height > 0' failed\n", 115) = 115
2686:write(2, "\n(gnome-screenshot:8700): Gtk-CRITICAL **: gtk_window_resize: assertion 'width > 0' failed\n", 91) = 91
2748:write(2, "\n** (gnome-screenshot:8700): CRITICAL **: Unable to capture a screenshot of any window\n", 87) = 87
$
答案1
首先,我尝试了 strace 父进程,例如 systemd 和 Xorg.bin,但我对 strace 很陌生,所以我无法弄清楚。
然后我认为这可能与权限问题有关(su -,sudo,...等)。所以我打算以root身份按快捷键。所以我很快意识到我可以用来sudo xdotool key Super+s
测试它。然后令我惊讶的是它竟然有效!
所以我尝试xdotool key Super+s
不使用 sudo,它仍然有效。所以我得出结论,它xdotool key Super+s
工作正常,但我仍然无法从 strace 日志中找出 xdotool 和按下的键之间的区别。
然后我想到如果我将其xdotool key Super+s
作为自定义快捷方式会怎样?所以我创建了一个新的自定义快捷方式超级+J并绑定到 command xdotool key Super+s
,其中超级+s已经绑定到 command scrot -s
。当我按下时它就会起作用超级+j
我测试过gnome-screenshot -a
,scrot -s
两者都很有效。
[更新]我找到了这个关联,问题 476:Xmonad 应在生成前释放按键绑定:
报道者[电子邮件受保护], 2011 年 9 月 18 日
这里使用 scrot 来截取屏幕截图。 Scrot 抓住键盘来监听按键作为中止信号。如果键盘不可用,则会出现错误:
giblib error: couldn't grab keyboard:Resource temporarily unavailable
去测试:
将“scrot -s > /tmp/logfile”绑定到 xmonad.hs 中的按键
激活按键,没有任何反应。
检查日志文件,发现上述错误。
我认为这是一个竞争条件,因为绑定到“sleep 0.2; scrot -s”在这里起作用。真正的问题是 xmonad 不必要地挂在键盘上,而生成的应用程序正在等待它。
您使用的是什么版本的产品?在什么操作系统上? 0.9.2/slackware Linux
他用来sleep
解决类似的问题。我测试了它并且它有效。但我必须把它放在 shell 脚本中,因为自定义命令似乎不支持&&或者;用于连接多个命令。但睡眠时间 0.2 有时对我不起作用。安全的方法当然是增加睡眠时间0.5-1秒。