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


27

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

我使用i3 WM。因此,我的问题是:如何配置类似Unity的屏幕快照行为,以便能够使用键盘快捷键或其他方式(而不涉及窗口ID和控制台内容)捕捉屏幕区域或窗口?

Answers:


29

您可以使用importImageMagick的一部分。

占领地区

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

import ss.png

捕获整个显示

import -window root ss.png

您也可以root使用窗口ID 替换单词,以捕获特定的窗口。


1
简单,完美,正是我所需要的-无需下载其他程序。
达伦·海恩斯

1
之后,您也可以单击一个窗口import ss.png以获取该窗口的屏幕快照。
John Gowers

9

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

首先,安装上述依赖项。然后,您可以使用以下脚本执行任何操作。它支持制作整个屏幕或屏幕区域的屏幕截图,并且自动将屏幕截图复制到剪贴板,以便您可以将其粘贴到任何地方(例如浏览器或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/"

6

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

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


哇,在谷歌搜索后,我意识到那只鹦鹉实际上可以满足我的所有需求。太奇怪了,我自己没有找到它。多谢,伙计!
ddnomad

您还可以使用scrot -s捕获特定区域。运行命令,然后单击并按住,然后单击第二点,它将在当前目录中创建一个以日期为文件名的文件。
vimdude

5

首先,安装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,后者会将其放在剪贴板上!


2

Flameshot是一个不错的选择。

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

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


1

如果您已安装它或不介意使用xfce4-screenshooter和i3 config进行安装,则一个非常简单的选择是:

bindsym Print exec --no-startup-id xfce4-screenshooter

警告:尽管相当轻巧,但如果您不使用任何其他xfce4程序,则仍会有些依赖


1

使用maim。它的开发更加积极,并依靠更好的斜坡

不要使用sc。当在更新窗口(例如htop)上使用时,其选择框会损坏并在屏幕截图中留下印象(调整大小时该框也会变形)。


(1)什么是“倾斜”?(2)究竟比什么更好?(3)为什么?
G-Man说'Resstate Monica''n

1.选择操作,用于选择窗口区域[ github.com/naelstrof/slop] 2.比scrot更好,因为它不会遭受选择框损坏(尝试在htop上进行scrot)。3. idk。
Hritik '17

1

我喜欢快门的后处理功能(手绘的红色圆圈!)和全面的配置选项。

您可以通过运行获取屏幕区域

shutter --select

您可以这样设置键绑定.config/i3/config

bindsym Print         exec shutter --full
bindsym Shift+Print   exec shutter --select

加载需要一秒钟,因此您可能需要在后台自动启动它:

exec shutter --min_at_startup

然后可以通过托盘图标访问快门,这将为您提供除以上之外的许多有用选项。


此时,快门无法轻松地完全安装在Ubuntu 18.04上(编辑工具取决于不可用的库;自定义PPA不是最新的)。伤心。
拉斐尔

1

该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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.