Linuxでスクリーンショットを撮る方法

この記事では、スクリーンショットを簡単にするために考案した自転車を永続させたいと思います。 はい、シャッターなどのプログラムの存在について知っていますが、何らかの理由でそれらはすべて私にとって不快であり、興味と時間があるので、この問題に対処しました。







自転車の仕組み



ユーザーがPrintScreenをクリックすると、質問が連続して尋ねられるメニューが表示されます。

  1. 全画面または一部(ウィンドウ)のみを保存しますか?
  2. 長いメモリのためにどこかに画像を含むファイルを保存するか、信頼性の低い/ tmpに保存するには?
  3. 自分でファイル名を入力するか、ランダムに生成するか、テンプレートで生成しますか?
  4. テンプレートに従って、テンプレートを選択するか、自分で入力することが提案されている場合
  5. 写真を撮るまでの遅延を秒単位で選択します
  6. 公開された画像のURLをクリップボードにコピーするかどうか
  7. ディスク上のファイルへのパス、および画像のURLを含むダイアログを表示するかどうか


この一連の質問を突破するプログラム:

  1. ファイル名を指定します(必要な場合)
  2. スクリーンショットを撮るか、ユーザーが領域またはウィンドウを選択するのを待ちます(男の陰謀)
  3. ユーザーが既に存在するファイル名を入力した場合、確認メッセージが表示されます。 キャンセルの場合、ユーザーは再度スクリプトを自分で呼び出す必要があります(彼自身はまだ別のファイル名を要求するほど賢くはありません)
  4. 保存されたファイルへのパスと公開された画像のURLはログファイルに記録されます
  5. スクリーンショットURLがクリップボードにコピーされます(必要な場合)
  6. ディスク上のファイルへのパスと公開された画像のURL(必要な場合)を含むダイアログが表示されます




引数なしで呼び出されたスクリプトは、毎回新たに質問をします。 ただし、ユーザーの答えを覚えて、彼はそれらをキャッシュしてファイル(デフォルトでは/tmp/screenshot.cache.sh



)に書き込みます。 cached



引数を使用してスクリプトを実行すると、スクリプトはキャッシュされた応答を読み取ろうとし、成功した場合は質問をしません。



したがって、キャッシュをロードしてスクリプトを呼び出すようにPrintScreenを構成し、キャッシュをロードせずに呼び出すようにWin + PrintScreenを構成すると、質問に新たに答えて写真をより速く撮影することで設定をいつでも変更できます。



免責事項



私のディストリビューションはArchLinuxであり、openboxをウィンドウマネージャーとして使用しています。 KDE / Gnome / Xfce / your_variantの幸運な所有者の場合、インストールと使用のプロセスは異なる場合があります。



建材



  1. dmenu(メニューを表示)
  2. scrot(スクリーンショット)
  3. zenity(ユーザーの質問をする)
  4. xclip(クリップボードへのリンクをコピー)

  5. imagepaste (画像ホスティングに画像をアップロード)
  6. スクリプト (すべてのコンポーネントを一緒に置く)
  7. terminus-font(メニューのフォント、オプション)


最初の4つのプログラムは(理論的には)ディストリビューションのリポジトリで利用可能である必要があります。 最後の項目はオプションです。 終端が気に入らない場合は、他のフォントを使用できます。 5番目のポイントは、私自身の技術です。その意味は、コマンドラインから1つのコマンドでImageShack.usなどのサイトに写真をアップロードすることです。 一般的に、この奇跡の組み立てはそれほど複雑ではありませんが、このプロセスの説明はこの記事の範囲を超えているため、このコンポーネントを別の ソリューションに自由に置き換えることができます。



順を追った説明


これはインストールがどのように見えるかです、彼は私のディストリビューションで最後まで始めました。

標準パッケージをインストールします。

 $ pacman -S dmenu scrot zenity xclip terminus-font
      
      





Xにこれらのフォントへのパスを知らせてください(さらに、このコマンドを〜/ .xinitrcで記述すると便利です)。

 $ xset +fp /usr/share/fonts/local/
      
      





imagepaste(または同等のもの)はすでにインストールされていると思われるため、この手順はスキップしてください。

スクリプトをインストールします。

 $ mkdir ~/bin $ cd !$ $ wget https://bitbucket.org/balta2ar/screenshot/raw/45ad932db13b/screenshot.sh $ chmod u+x ./screenshot.sh
      
      





〜/ binフォルダは私の手工芸品に使用されます。 スクリプトでは、おそらく変更する必要があります。

LOG



ログファイルへのパス

フォント-メニューフォント

IMAGEPASTE_CMD



写真を公開するためのチーム

BASEDIR



保存するスクリーンショットのベースディレクトリ



ログファイルを作成することを忘れないでください。

 $ touch /var/log/screenshot.log $ sudo chown `whoami`:users !$
      
      





最後に、ホットキーにスクリプト呼び出しを設定します。 このために、openboxの機能、つまりobkeyを使用してホットキーを構成しました。 ただし、すぐに〜/ .config / openbox / rc.xmlにアクセスして以下を追加できます。

 <keybind key="Print"> <action name="Execute"> <command>/home/bz/bin/screenshot.sh cached</command> </action> </keybind> <keybind key="W-Print"> <action name="Execute"> <command>/home/bz/bin/screenshot.sh</command> </action> </keybind>
      
      







長所






短所






スクリプト全体


 #!/bin/bash init() { ACTIONS[0]="window/region,screen" ACTIONS[1]="drop,save" ACTIONS[2]="create random,ask,incremental pattern" ACTIONS[3]="screenshot-%05d.png" ACTIONS[4]="0,5,10,30,60" ACTIONS[5]="yes,no" ACTIONS[6]="no,yes" PROMPT[0]="Capture region" PROMPT[1]="Picture file" PROMPT[2]="File name" PROMPT[3]="File name pattern" PROMPT[4]="Delay" PROMPT[5]="Copy to clipboard" PROMPT[6]="Show links in a dialog" IND_CAPTURE_REGION=0 IND_FILESAVE=1 IND_FILENAME=2 IND_PATTERN=3 IND_DELAY=4 IND_COPY_CLIPBOARD=5 IND_SHOW_LINKS=6 LOG="/var/log/screenshot.log" FONT='-xos4-terminus-*-*-*-*-16-*-*-*-*-*-*-*' DMENU="dmenu -fn $FONT" IMAGEPASTE_CMD="imp" SCREENSHOT_CMD="scrot" SCREENSHOT_OPTIONS= OPTIONS= COUNT=${#ACTIONS[*]} BASEDIR="/home/`whoami`/pic/screenshot/scrot" CACHE="/tmp/screenshot.cache.sh" PATTERN_INDEX=0 } load_cache() { source $CACHE } save_cache() { echo -n > $CACHE for (( i = 0; i < ${#OPTIONS[*]}; i++ )) do echo "OPTIONS[$i]=\"${OPTIONS[$i]}\"" >> $CACHE done echo "PATTERN_INDEX=\"$PATTERN_INDEX\"" >> $CACHE } random_filename() { TMP=`mktemp --suffix=.scrot` BASE=`basename $TMP` FILENAME="$BASEDIR/$BASE.png" } ask_filename() { FILENAME=`zenity --entry --text "Enter filename" --entry-text "$BASEDIR/"` } set_next_pattern_filename() { FILENAME="$BASEDIR/$(printf ${OPTIONS[$IND_PATTERN]} $PATTERN_INDEX)" PATTERN_INDEX=$(($PATTERN_INDEX + 1)) while [ -e "$FILENAME" ]; do FILENAME="$BASEDIR/$(printf ${OPTIONS[$IND_PATTERN]} $PATTERN_INDEX)" PATTERN_INDEX=$(($PATTERN_INDEX + 1)) done } ask_options() { for i in $(seq 0 $(($COUNT - 1))) do # if we are about to ask patern and # it wasn't the choise in prev question, continue if [ "$i" -eq "$IND_PATTERN" -a "${OPTIONS[$IND_FILENAME]}" != "incremental pattern" ] then continue fi OP=`echo ${ACTIONS[$i]} | tr "," "\n" | $DMENU -p "${PROMPT[$i]}"` if [ ! -n "$OP" ]; then exit 0 fi OPTIONS[$i]=$OP done } parse_options() { # parse options and ask user questions, if any ITEM=${OPTIONS[$IND_CAPTURE_REGION]} case "$ITEM" in window/region) SCREENSHOT_OPTIONS="-b -s" ;; screen) ;; esac ITEM=${OPTIONS[$IND_FILESAVE]} case "$ITEM" in save) # Dont touch BASEDIR ;; drop) BASEDIR="/tmp" ;; esac ITEM=${OPTIONS[$IND_FILENAME]} case "$ITEM" in ask) ask_filename ;; "create random") random_filename ;; "incremental pattern") set_next_pattern_filename ;; esac ITEM=${OPTIONS[$IND_DELAY]} SCREENSHOT_OPTIONS="$SCREENSHOT_OPTIONS -d $ITEM" } check_existence() { if [ -e "$FILENAME" ] then zenity --question --text "File already exists. Overwrite?" OVERWRITE=$? if [ $OVERWRITE -ne 0 ] then exit 1 fi fi } do_screenshot() { rm -f "$FILENAME" mkdir -p `dirname "$FILENAME"` $SCREENSHOT_CMD $SCREENSHOT_OPTIONS "$FILENAME" CMD="$IMAGEPASTE_CMD $FILENAME" URL="`$CMD`" echo "$FILENAME -> $URL" >> $LOG } copy_to_clipboard() { if [ ${OPTIONS[$IND_COPY_CLIPBOARD]} == "yes" ] then echo "$URL" | xclip -selection primary echo "$URL" | xclip -selection clipboard fi } show_links() { if [ ${OPTIONS[$IND_SHOW_LINKS]} == "yes" ] then zenity --info --no-wrap --text "$FILENAME\n$URL" fi } init if [ -e "$CACHE" -a "$1" == "cached" ] then load_cache else ask_options fi save_cache parse_options check_existence do_screenshot copy_to_clipboard show_links exit 0
      
      







UPD 01 :遅延選択を追加しました: 0、5、10、30、60秒。

UPD 02 :追加:1)ユーザー応答のキャッシュ2)ファイル名の増分パターンを指定する機能。



All Articles