web-dev-qa-db-ja.com

i3 WMを使用してArch Linuxで画面領域のスクリーンショットを簡単に作成するにはどうすればよいですか?

約1か月前に、Ubuntu 14.04 LTSからArchに切り替えましたが、この決定に非常に満足しています。ただし、新しいディストリビューションにはいくつかの機能がありません。特に Shift+printscr Unityでは、キャプチャする画面領域を選択できます。

私はi3 WMを使用しています。それで、私の質問は、キーボードのショートカットなどで画面領域またはウィンドウをスナップできるように、Unityのようなスクリーンショットの動作を構成するにはどうすればよいですか(ウィンドウIDやコンソールなどを掘り下げることなく)?

27
ddnomad

私がこの質問をしたのは久しぶりで、一部のユーザーに役立つようです。そこで、xclipおよびimagemagickパッケージでスクリーンショットを作成するための独自のスクリプトを提供します。

まず、上記の依存関係をインストールします。次に、以下のスクリプトを使用して、好きなことができます。画面全体または画面領域のスクリーンショットの作成をサポートし、スクリーンショットをクリップボードに自動的にコピーするので、どこにでも貼り付けることができます(例:ブラウザーまたはTelegramメッセンジャー)。

ハックを思い付くのがそれほど難しくないカップルは、特定のウィンドウをキャプチャするためのサポートを追加し、部分のコピーを切り替えます。

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

ImageMagickの一部であるimportを使用できます。

領域をキャプチャする

これにより、カーソルが十字線に変わり、クリックしてドラッグしてボックスを形成すると、そのボックスはss.pngとして保存されます。

import ss.png

ディスプレイ全体をキャプチャ

import -window root ss.png

Word rootをウィンドウIDに置き換えて、特定のウィンドウをキャプチャすることもできます。

31
casey

試しましたか scrot a、簡単なコマンドライン画面キャプチャユーティリティ

ref。、: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/

6
Corleone

まず、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にパイプします!

5
Elmer

Flameshot はまともな代替手段です。

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

オプション-p /path/to/directoryを使用して、保存ディレクトリの選択をスキップできます。

4
Raphael

私は シャッター が後処理機能(手描きの赤い丸!)と包括的な構成オプションのために気に入っています。

実行することで画面領域をつかむことができます

shutter --select

次のように、.config/i3/configにキーバインディングを設定できます。

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

ロードに1秒かかるため、バックグラウンドで自動起動することができます。

exec shutter --min_at_startup

シャッターはトレイアイコンからアクセスできるようになり、上記以外にも多くの便利なオプションが提供されます。

1
Raphael

あなたがそれをインストールしたか、インストールすることを気にしない場合の非常に単純なオプションはxfce4-screenshooterを使用しており、i3 configは次のようになります:

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

警告:かなり軽量ですが、他のxfce4プログラムを使用していない場合、いくつかの依存関係があります。

1
Daniel

このPerl6スクリプトはroot、area、window、またはdelay インポートを使用してスクリーンショットを作成し、$ 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
1
Mimosinnet

maim を使用します。より積極的に開発されており、 slop に依存しています。

スクロットを使用しないでください。更新ウィンドウ(htopなど)上で使用すると、選択ボックスが破損し、スクリーンショットに印象が残ります(サイズ変更時にボックスも変形します)。

1
Hritik