Sun 27 Sep 2015 12:09:43 AM CST
scrot 是一个轻量级的屏幕截图程序,它的功能很简单,但都很实用。它的选项很容易看懂。
-
直接对整个屏幕截图:
$ scrot # 将图片保存在当前目录下 $ scrot /tmp/screenshot.png #指定输出文件
不指定输出文件时,默认输出文件格式是 "%Y-%m-%d-%H-%M-%S_$wx$h.png",就是 年-月-日-时-分-秒_宽x高.png 。其中以%开头的变量是strftime,在C库函数中也是通用的,date命令也遵循同样的格式。而$符号开头的变量则是scrot自己内部定义的,另外比较有用的一个是 $f,代表整个文件名,可以用这个变量对截好的图进行下一步操作。
-
截图的后续处理
$ scrot -e 'mv $f ~/Pictures/' # 所有截图都保存在同一个目录下
-
选择区域截图
$ scrot -s
-
图像质量设定
$ scrot -q 50 # 0-100,默认是75,其实1和10看不出什么差别,10和50也没什么差别。。
有时候,可能希望在敲完命令,对窗口做一些改动后再开始截图,于是 -d 选项就很有用了。
-
延迟N秒后截图
$ scrot -d 3 # delay $ scrot -d 3 -c # delay and count down 3..2..1..
-
对当前获得焦点的窗口截图
$ scrot -u -d 2 -c # 因为在终端输命令的时候肯定焦点在终端上啦,所以希望延迟几秒好有时间把焦点转移到要截图的窗口
还可以用 import 命令,首先要获得活动窗口的id:
#!/bin/sh
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId=${activeWinLine:40}
import -window "$activeWinId" /tmp/$(date +%F_%H%M%S_%N).png
我现在是用i3-dmenu-desktop(其实是j4-dmenu-desktop)来启动程序,但是 scrot 是没有.desktop文件的,需要手动生成。 * 生成 scrot.desktop 文件(/usr/share/applications/scrot.desktop)
[Desktop Entry]
Name=Scrot
Comment=Take screen shots
Exec=scrot -e "mv \$f ~/Pictures/Screenshots/"
Terminal=false
Type=Application
注意比较坑的一点是,直接在shell中执行时,-e 后面的命令需要用单引号包含,因为双引号会让bash展开例如说 $f 等 scrot 的内部变量。但在.desktop文件里不会去解析双引号,而且好像必须要用双引号才行。另外dollar符号要进行转义。这个试了好多遍才做对,还查了freedesktop上的官方文档 The Exec Key。
最后有一个没有解决的问题是,我现在有两块显示屏,scrot 默认是同时截取所有的屏幕,然后合成一个大文件。这个大文件当然不可能在任何一个单独的屏幕上完全显示!而且如果两块屏幕分辨率是不一样的,最终合成的图片看着也很别扭。
我目前还不知道如何单独截取一个屏幕(想到了给scrot指定 DISPLAY变量,但是在两块屏幕上这两个变量都是一样的。)
-
多屏幕时 对单个物理屏幕的截屏
#!/bin/sh
xdpyinfo -ext XINERAMA | sed '/^ head #/!d;s///' |
while IFS=' :x@,' read i w h x y; do
import -window root -crop ${w}x$h+$x+$y head_$i.png
done
# head #0: 1920x1080 @ 1280,0
# head #1: 1280x1024 @ 0,0
其原理是对默认截下来的所有屏幕的拼接图片进行剪裁,通过给 import 的-crop选项指定参数,因为第一块屏幕是左上角坐标为(1280,0),宽高是1920x1080,那么参数就应为1920x1080+1280+0。