#!/bin/bash
######################################################################################
# Simple script to enable users to make screenshots of tooltips/menus/etc... #
# without timers #
######################################################################################
######################################################################################
# Configuration Section (defaults) #
######################################################################################
SCREENSHOT_COMMAND="shutter -s"
# The keys can be found out using xinput test "keyboard name"
MODIFIER_KEY=133 #The <Super> Key (aka. Meta or Windows Key)f
CANCEL_KEY=54 # C
CAPTURE_KEY=27 # R
DAEMON_MODE="false" # change to true if you want to keep the script running after the screenshot was taken
VERBOSE="true" #Change this to any value if you dont want to have notifications
######################################################################################
######################################################################################
# Command parsing #
######################################################################################
function usage {
echo "$0 [-hemrcdn]"
echo "-h prints this message"
echo "-e <command> - execute that command instead of shutter"
echo "-m <int> - The modifier key to use. Use xinput test <keyboar> to find out what is what"
echo "-r <int> - The key to use for capture."
echo "-c <int> - The key used for cancelling (only valid in non daemon mode)"
echo "-d - daemon mode. Will keep on running after a screenshot was taken. to kill the daemon, use \"killall xinput\""
echo "-n - disables notifications"
exit;
}
while getopts "he:m:r:c:dn" flag
do
if [ "$flag" == "h" ]; then
usage
fi
if [ "$flag" == "e" ]; then
SCREENSHOT_COMMAND=$OPTARG
fi
if [ "$flag" == "m" ]; then
CAPTURE_KEY=$OPTARG
fi
if [ "$flag" == "r" ]; then
SCREENSHOT_COMMAND=$OPTARG
fi
if [ "$flag" == "c" ]; then
CANCEL_KEY=$OPTARG
fi
if [ "$flag" == "d" ]; then
DAEMON_MODE="true"
fi
if [ "$flag" == "n" ]; then
VERBOSE="false"
fi
done
######################################################################################
KEYBOARDS=`xinput list | grep "slave" | grep "keyboard" | sed "s/[^a-zA-Z]*\(.*\)id=.*/\1/" | sed "s/[\t ]*$//"`
function run {
MODIFIER_PRESSED="false"
while read line;
do
COMMAND=`echo $line | awk '{print $2;}'`
KEY=`echo $line | awk '{print $3;}'`
if [ "$KEY" == "$MODIFIER_KEY" ]; then
if [ "$COMMAND" == "press" ]; then
MODIFIER_PRESSED="true"
else
MODIFIER_PRESSED="false"
fi
fi
if [ "$KEY" == "$CAPTURE_KEY" -a "$MODIFIER_PRESSED" == "true" -a "$COMMAND" == "press" ]; then
bash -c $SCREENSHOT_COMMAND
if [ "$VERBOSE" == "true" ]; then
notify-send "Taking Screenshot"
fi
if [ "$DAEMON_MODE" == "false" ]; then
quit
fi
fi
if [ "$KEY" == "$CANCEL_KEY" -a "$MODIFIER_PRESSED" == "true" -a "$COMMAND" == "press" -a "$DAEMON_MODE" == "false" ]; then
if [ "$VERBOSE" == "true" ]; then
notify-send "Canceling Screenshot"
fi
quit
fi
done;
}
function quit {
killall -9 xinput
exit
}
if [ "$VERBOSE" == "true" ]; then
notify-send "Screenshot script waiting. Press Meta + R to capture the screenshot"
fi
IFS=$'\n'
for i in $KEYBOARDS
do
unbuffer xinput test "$i" | run &
done
实际上,可以毫不拖延地做到这一点,但需要一些技巧。我写了一个小脚本,可以让你毫不拖延地做到这一点。这是一个很大的技巧,但它确实有效,而且(对我而言)肯定比使用延迟更可取。
在您可以实际使用脚本之前(在 ubuntu 上),您需要确保您有xinput和unbuffer。为此,只需执行以下操作:
然后就可以运行脚本了。首先使用 -h 选项运行它以查看可能的配置选项。默认情况下,脚本只会运行一次,并且您必须在每次截屏后重新启动脚本(例如,通过键盘快捷键)。这是因为脚本可能会影响性能。如果您想将它作为“守护程序”运行,请使用该
-d
选项运行它。默认情况下,它也会使用快门。如果您想使用其他东西,请使用该
-e
选项,例如script.sh -c "ksnapshot"
默认情况下,捕获按钮为Meta+ R。您可以使用配置选项进行更改。
因为你想知道快门是否也可以......
要在 Shutter中执行此操作,请将其打开并从工具栏或File > New > Fullscreen中选择Full Screen。
确保您设置了时间延迟,以便您有足够的时间打开应用程序菜单(编辑>首选项>主选项卡;在底部,有一个选择框:延迟 __ 秒后捕获)。
是的。打开屏幕截图,并设置您认为返回并打开菜单所需的任何时间的延迟。保持打开状态,直到拍摄完成。
快速回答/解决方法
(适用于中高级 ubuntu 用户)
gnome-screenshot --delay=numIntValueInSecs
例如
gnome-screenshot --delay=3
添加另一个以获取活动窗口屏幕截图:
gnome-screenshot -w --delay=3
就是这样,但我还建议设置另外 2 个,这样可以让您有更多时间在菜单中进行更深入的导航。
gnome-screenshot --delay=10
gnome-screenshot -w --delay=10
详尽的回答
(黑客新手)
介绍:
每当您按PrntScr时,Ubuntu 所做的只是调用
gnome-screenshot
通常位于/usr/bin/
路径上并且可从“终端”(电传打字机、tty、cli、命令行/提示符)获得的调用,因此您可以以各种方式使用它来适应您的时髦目的。小
gnome-screenshot
程序接受可选参数,可以通过传递标准参数来查看所有选项寻求帮助,你知道的(-h
)如果您仍然不确定如何使用它,您可以随时阅读更详细的帮助,只需要求手动输入
man gnome-screenshot
您阅读完整手册的次数越多,根据您的需要破解 ubuntu 将变得直观,您将不需要其他人为您提供逐步说明。也许到了这一点,您甚至知道如何自己解决此问题,如果您仍然迷路(希望不会),请继续阅读...
指示:
现在
Shortcuts
选项卡。Custom Shortcuts
+
按钮添加新的自定义快捷方式。(就像上面“快速回答”中描述的那样)
4½。分配您想要的组合键。
*快!
你只是更进一步成为一名 ubuntu 大师,我希望这个答案有帮助 *
使用屏幕截图(在附件中)并设置“延迟 xx 秒后抓取”。
为我工作
我找到了解决方法,而不是实际的解决方案。
打开
Screenshot
应用程序,在打开的窗口中,将时间设置为Grab after a delay of x seconds。注意:这不能用于抓取窗口的特定部分。
注意:对不起,也不能将Screenshot应用程序本身的屏幕截图作为窗口或抓取特定部分。
我不会说这是一个错误。可以使用“屏幕截图”工具并将“延迟 x 秒后抓取”设置为您需要重新打开菜单的时间。