好的,这是我的问题:我有一个应用程序想要截屏;但是由于gnome-screenshot
每次mate-screenshot
从交互式小程序窗口启动时截屏时都会隐藏工具栏或其他东西,它们会弄乱我正在截屏的应用程序窗口,然后应用程序崩溃。我唯一能做的就是直接用文件名和延迟启动 gnome-screenshot,这使得这个过程相当繁琐。
所以,这就是我正在考虑做的事情 - 我可以通过系统/键盘快捷键设置一个全局按键监听器”:
这可能会触发某些程序,如果你愿意的话,它会发送某种全局“信号”(可能是 TCP/IP 数据包或类似的东西)。
然后,我可以在一个开放的终端中创建一个“监听器”脚本,该脚本对信号做出反应(从某种意义上说,netcat
可以设置为监听服务器,对传入的 TCP/IP 数据做出反应,然后通过 grep 或其他方式过滤反应),并作为响应运行gnome-screenshot -d 10 -f ~/Desktop/test.png
。下面是一个简单的 netcat 示例:
nc -l -p 1234 | while read l; do \
if [ "$l" == "d" ]; then \
echo "GOT IT"; \
else \
echo $l; \
fi; \
done
问题是 - 是否有任何应用程序可用于全局发送此事件,并在终端中侦听和过滤它?在尝试开发自己的自定义netcat
脚本解决方案之前,我想知道是否有类似的东西可以避免网络......
答案1
好的,用这个做了netcat
,但希望有人能发布更好的解决方案:
#!/usr/bin/env bash
# let the signal be the letter "d"
# set up a netcat listener, and run gnome-screenshot without prompt on incoming signal
# in System/Keyboard shortcuts:
# Name: trignetshot
# Cmd: bash -c "echo d | nc localhost 1234"
# Shortcut: whatever...
# then run this script in a terminal - and then press the shortcut key
while [ 1 ]; do # else it exits at each received line with TCP
echo "Starting listener...";
nc -l -p 1234 | while read l; do
if [ "$l" == "d" ]; then
echo "GOT IT";
# calculate screenshot name
maxnum=0;
for ix in ~/Desktop/Screenshot*.png; do
tnum=$(echo $ix | egrep -o '[[:digit:]]*');
#echo $tnum ;
if [ -z "$tnum" ]; then
tnum=0;
fi;
if (($tnum>$maxnum)); then
maxnum=$tnum;
fi;
done;
#echo $maxnum # have it here
newnum=$((maxnum+1))
set -x
gnome-screenshot -d 1 -f ~/Desktop/Screenshot-${newnum}.png
set +x
fi;
done;
done