約1か月前に、Ubuntu 14.04 LTSからArchに切り替えましたが、この決定に非常に満足しています。ただし、新しいディストリビューションにはいくつかの機能がありません。特に Shift+printscr Unityでは、キャプチャする画面領域を選択できます。
私はi3 WMを使用しています。それで、私の質問は、キーボードのショートカットなどで画面領域またはウィンドウをスナップできるように、Unityのようなスクリーンショットの動作を構成するにはどうすればよいですか(ウィンドウIDやコンソールなどを掘り下げることなく)?
私がこの質問をしたのは久しぶりで、一部のユーザーに役立つようです。そこで、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/"
ImageMagickの一部であるimport
を使用できます。
領域をキャプチャする
これにより、カーソルが十字線に変わり、クリックしてドラッグしてボックスを形成すると、そのボックスはss.png
として保存されます。
import ss.png
ディスプレイ全体をキャプチャ
import -window root ss.png
Word root
をウィンドウIDに置き換えて、特定のウィンドウをキャプチャすることもできます。
試しましたか scrot a、簡単なコマンドライン画面キャプチャユーティリティ
ref。、: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/
まず、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にパイプします!
Flameshot はまともな代替手段です。
bindsym Print exec flameshot full
bindsym Shift+Print exec flameshot gui
オプション-p /path/to/directory
を使用して、保存ディレクトリの選択をスキップできます。
私は シャッター が後処理機能(手描きの赤い丸!)と包括的な構成オプションのために気に入っています。
実行することで画面領域をつかむことができます
shutter --select
次のように、.config/i3/config
にキーバインディングを設定できます。
bindsym Print exec shutter --full
bindsym Shift+Print exec shutter --select
ロードに1秒かかるため、バックグラウンドで自動起動することができます。
exec shutter --min_at_startup
シャッターはトレイアイコンからアクセスできるようになり、上記以外にも多くの便利なオプションが提供されます。
あなたがそれをインストールしたか、インストールすることを気にしない場合の非常に単純なオプションはxfce4-screenshooterを使用しており、i3 configは次のようになります:
bindsym Print exec --no-startup-id xfce4-screenshooter
警告:かなり軽量ですが、他のxfce4プログラムを使用していない場合、いくつかの依存関係があります。
この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