Answers:
您可以使用import
ImageMagick的一部分。
占领地区
这会将光标更改为十字准线,然后单击并拖动以形成一个框,该框将另存为ss.png
。
import ss.png
捕获整个显示
import -window root ss.png
您也可以root
使用窗口ID 替换单词,以捕获特定的窗口。
import ss.png
以获取该窗口的屏幕快照。
自从我问了这个问题已经很长时间了,它似乎对某些用户有帮助。因此,我提供了自己的脚本来使用xclip
和imagemagick
软件包制作屏幕截图。
首先,安装上述依赖项。然后,您可以使用以下脚本执行任何操作。它支持制作整个屏幕或屏幕区域的屏幕截图,并且自动将屏幕截图复制到剪贴板,以便您可以将其粘贴到任何地方(例如浏览器或Telegram Messenger)。
几个不太难提出的hacks将添加对捕获特定窗口和切换复制部分的支持。
#!/usr/bin/env bash
# screenshots stuff
# TODO: docs
function help_and_exit {
if [ -n "${1}" ]; then
echo "${1}"
fi
cat <<-EOF
Usage: scregcp [-h|-s] [<screenshots_base_folder>]
Take screenshot of a whole screen or a specified region,
save it to a specified folder (current folder is default)
and copy it to a clipboard.
-h - print help and exit
-s - take a screenshot of a screen region
EOF
if [ -n "${1}" ]; then
exit 1
fi
exit 0
}
if [ "${1}" == '-h' ]; then
help_and_exit
elif [ "${1:0:1}" == '-' ]; then
if [ "${1}" != '-s' ]; then
help_and_exit "error: unknown option ${1}"
fi
base_folder="${2}"
else
base_folder="${1}"
params="-window root"
fi
file_path=${base_folder}$( date '+%Y-%m-%d_%H-%M-%S' )_screenshot.png
import ${params} ${file_path}
xclip -selection clipboard -target image/png -i < ${file_path}
这是我i3wm
使用此脚本的参考快捷方式:
# take a screenshot of a screen region and copy it to a clipboard
bindsym --release Shift+Print exec "scregcp -s /home/ddnomad/pictures/screenshots/"
# take a screenshot of a whole window and copy it to a clipboard
bindsym --release Print exec "scregcp /home/ddnomad/pictures/screenshots/"
首先,安装xclip,imagemagick和jq!
pacman -S imagemagick jq xclip
我的i3配置中有以下一行:
bindsym $mod+Print exec \
import -window $( \
i3-msg -t get_tree | \
jq 'recurse(.nodes[]) | select(.focused).window' \
) png:- | \
xclip -selection clipboard -t image/png
当您按下mod(Window / Alt)+ Printscreen时,这会将活动窗口的屏幕截图放置在剪贴板上。
i3-msg -t get-tree从i3获取所有窗口作为json,然后我们使用jq获取聚焦窗口的窗口ID。我们将其传递给imagemagicks import命令,并将结果通过管道传递给xclip,后者会将其放在剪贴板上!
我喜欢快门的后处理功能(手绘的红色圆圈!)和全面的配置选项。
您可以通过运行获取屏幕区域
shutter --select
您可以这样设置键绑定.config/i3/config
:
bindsym Print exec shutter --full
bindsym Shift+Print exec shutter --select
加载需要一秒钟,因此您可能需要在后台自动启动它:
exec shutter --min_at_startup
然后可以通过托盘图标访问快门,这将为您提供除以上之外的许多有用选项。
该perl6脚本使用导入获取根,区域,窗口或延迟 ScreenShot,并将其保存在$ file和剪贴板中。
#!/usr/bin/env perl6
use v6;
sub print_window(Str $file) {
qx{xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"} ~~ /(0x\S*)/;
run <import -window>, $0, $file;
}
sub MAIN( Str $option where $option ∈ <root area window delay> ) {
my $today = DateTime.now(
formatter => {
sprintf "%04d_%02d_%02d_%02d-%02d-%02d", .year, .month, .day, .hour, .minute, .second
}
);
my $file = "$*HOME/Dades/Imatges/ScreenShots/$today.png";
given $option {
when 'root' { run <import -window root>, $file }
when 'area' { run 'import', $file }
when 'window' { print_window($file) }
when 'delay' { sleep 10; print_window($file) }
}
run <xclip -selection clipboard -target image/png -i>, $file;
run <xmessage -nearmouse -timeout 3>, "Screenshot in clipboard, and saved in $today.png";
}
这些是i3中运行脚本的键绑定:
bindsym $mod+Print exec Print_Screen root
bindsym --release $mod+Shift+Print exec Print_Screen area
bindsym $mod+Mod1+Print exec Print_Screen delay
bindsym $mod+Control+Print exec Print_Screen window