如何使用 i3 WM 在 Arch Linux 上轻松制作屏幕区域的屏幕截图?

ddn*_*mad 36 arch-linux screenshot i3

大约一个月前,我从 Ubuntu 14.04 LTS 切换到 Arch,我对这个决定非常满意。但是,我想念我的新发行版的一些功能,尤其是Shift+ printscr,它在 Unity 中允许选择要捕获的屏幕区域。

我使用 i3 WM。所以,我的问题是:如何配置类似 Unity 的屏幕截图行为,以便能够使用键盘快捷键或其他东西(无需深入研究窗口 ID 和控制台内容)来捕捉屏幕区域或窗口?

cas*_*sey 41

您可以使用importImageMagick 的一部分。

捕获一个区域

这会将您的光标更改为十字准线,当您单击并拖动以形成一个框时,该框将保存为ss.png.

import ss.png
Run Code Online (Sandbox Code Playgroud)

捕获整个显示

import -window root ss.png
Run Code Online (Sandbox Code Playgroud)

您还可以root用窗口 id替换单词以捕获特定窗口。

  • 您还可以在“import ss.png”之后单击一个窗口,以便对该窗口进行屏幕截图。 (4认同)
  • @Chris_128 您必须使用 --release 标志,例如`bindsym --release Print exec import ~/screenshot.png`。在此处查看有关原因的解释 https://i3wm.org/docs/userguide.html (2认同)

ddn*_*mad 15

我已经很久没有问这个问题了,看起来它对某些用户有帮助。所以我提供了我自己的脚本来使用xclip和imagemagick包制作屏幕截图。

首先,安装上面提到的依赖项。然后你可以用下面的脚本做任何你想做的事情。它支持制作整个屏幕或屏幕区域的屏幕截图,并且它会自动将屏幕截图复制到剪贴板,以便您可以将其粘贴到任何地方(ei 浏览器或 Telegram 信使)。

一些不太难提出的 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}
Run Code Online (Sandbox Code Playgroud)

这是我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/"
Run Code Online (Sandbox Code Playgroud)


Rap*_*ael 14

Flameshot是一个不错的选择。

bindsym Print       exec flameshot full
bindsym Shift+Print exec flameshot gui
Run Code Online (Sandbox Code Playgroud)

您可以使用选项-p /path/to/directory跳过选择保存目录。


小智 8

您是否尝试过scrot一个简单的命令行屏幕捕获实用程序

参考,:https : //faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/


小智 6

首先,安装 xclip、imagemagick 和 jq!

pacman -S imagemagick jq xclip
Run Code Online (Sandbox Code Playgroud)

我的 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
Run Code Online (Sandbox Code Playgroud)

当您按 mod (Window / Alt) + Printscreen 时,这会将活动窗口的屏幕截图放在剪贴板上。

i3-msg -t get-tree 从 i3 中获取所有窗口作为 json,然后我们使用 jq 获取聚焦窗口的窗口 id。我们将它传递给 imagemagicks 导入命令,并将结果通过管道传递给 xclip,xclip 将把它放在剪贴板上!