在全局按键时发送事件-在终端中有一个监听器做出反应并运行另一个程序?

在全局按键时发送事件-在终端中有一个监听器做出反应并运行另一个程序?

好的,这是我的问题:我有一个应用程序想要截屏;但是由于gnome-screenshot每次mate-screenshot从交互式小程序窗口启动时截屏时都会隐藏工具栏或其他东西,它们会弄乱我正在截屏的应用程序窗口,然后应用程序崩溃。我唯一能做的就是直接用文件名和延迟启动 gnome-screenshot,这使得这个过程相当繁琐。

所以,这就是我正在考虑做的事情 - 我可以通过系统/键盘快捷键设置一个全局按键监听器”:

屏幕截图-键盘%20Shortcuts.png

这可能会触发某些程序,如果你愿意的话,它会发送某种全局“信号”(可能是 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

相关内容