如何使用 i3 WM 轻松截取 Arch Linux 上的屏幕区域?

如何使用 i3 WM 轻松截取 Arch Linux 上的屏幕区域?

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

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

答案1

您可以使用importImageMagick 的一部分。

捕获一个区域

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

import ss.png

捕获整个显示

import -window root ss.png

您还可以将单词替换root为窗口 ID 以捕获特定窗口。

答案2

自从我问这个问题以来已经很长时间了,看起来它对某些用户很有帮助。因此,我提供了自己的脚本,用于使用xclipimagemagick包制作屏幕截图。

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

一些不那么难想出的技巧会添加对捕获特定窗口和切换复制部分的支持。

#!/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/"

答案3

火焰射击是一个不错的选择。

bindsym Print       exec flameshot full
bindsym Shift+Print exec flameshot gui

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

您可以在此处编辑配置~/.config/i3/config并使用 重新加载配置i3-msg reload

答案4

首先,安装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,xclip 将把它放在剪贴板上!

相关内容