मैं आसानी से i3 WM के साथ आर्क लिनक्स पर स्क्रीन क्षेत्रों के स्क्रीनशॉट कैसे बना सकता हूं?


27

लगभग एक महीने पहले मैंने Ubuntu 14.04 LTS से आर्क पर स्विच किया और मैं इस फैसले से काफी खुश हूं। हालाँकि, मैं अपने नए डिस्ट्रो के साथ कुछ विशेषताओं को याद करता हूं, विशेष रूप से Shift+ printscrजो यूनिटी में स्क्रीन क्षेत्र के चयन पर कब्जा करने की अनुमति देता है।

मैं i3 WM का उपयोग करता हूं। तो, मेरा सवाल यह है: मैं कीबोर्ड शॉर्टकट या कुछ के साथ स्क्रीन क्षेत्रों या खिड़कियों को स्नैप करने में सक्षम होने के लिए एकता-जैसे स्क्रीनशॉट व्यवहार को कैसे कॉन्फ़िगर कर सकता हूं (विंडो आईडी और कंसोल सामान में खुदाई किए बिना)?

जवाबों:


29

आप उपयोग कर सकते हैं import , ImageMagick का हिस्सा।

एक क्षेत्र पर कब्जा

यह आपके कर्सर को एक क्रॉसहेयर में बदल देगा और जब आप एक बॉक्स बनाने के लिए क्लिक और ड्रैग करेंगे, तो वह बॉक्स के रूप में सहेजा जाएगा ss.png

import ss.png

पूरे प्रदर्शन पर कब्जा

import -window root ss.png

आप rootकिसी विशिष्ट विंडो को कैप्चर करने के लिए शब्द को विंडो आईडी से भी बदल सकते हैं।


1
सिंपल, परफेक्ट, बस मुझे जो चाहिए था - और मुझे दूसरा प्रोग्राम डाउनलोड नहीं करना था।
डैरेन हेन्स

1
import ss.pngउस विंडो का स्क्रीनशॉट लेने के लिए आप एक विंडो पर भी क्लिक कर सकते हैं।
जॉन

9

मुझे यह प्रश्न पूछे हुए बहुत समय हो गया है और ऐसा लगता है कि यह कुछ उपयोगकर्ताओं के लिए उपयोगी है। इसलिए मैं स्क्रीनशॉट के साथ xclipऔर imagemagickपैकेज बनाने के लिए अपनी स्क्रिप्ट प्रदान करता हूं ।

सबसे पहले, उपर्युक्त निर्भरताओं को स्थापित करें। फिर आप नीचे स्क्रिप्ट के साथ जो चाहें कर सकते हैं। यह पूरी स्क्रीन या स्क्रीन क्षेत्र का स्क्रीनशॉट बनाने का समर्थन करता है और यह स्वचालित रूप से एक स्क्रीनशॉट को एक क्लिपबोर्ड पर कॉपी करता है ताकि आप इसे हर जगह पेस्ट कर सकें (ईआइ ब्राउज़र या टेलीग्राम मैसेंजर)।

हैक के साथ आने के लिए बहुत मुश्किल नहीं एक जोड़ी विशिष्ट खिड़कियों पर कब्जा करने और नकल भाग को टॉगल करने के लिए एक समर्थन जोड़ देगा।

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

क्या आपने स्क्रोट की कोशिश की है ए, सरल कमांडलाइन स्क्रीन कैप्चर उपयोगिता की कोशिश की है

रेफ।:: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/


वाह, गुग्लिंग के बाद मुझे एहसास हुआ, वह तोता वास्तव में मेरी जरूरत की हर चीज के लिए सक्षम है। बहुत अजीब मैं इसे अपने आप से नहीं मिला। धन्यवाद दोस्त!
ddnomad

आप किसी विशिष्ट क्षेत्र को कैप्चर करने के लिए scrot -s का भी उपयोग कर सकते हैं। कमांड चलाएं फिर क्लिक करें और होल्ड करें फिर दूसरे बिंदु पर क्लिक करें, यह आपकी वर्तमान निर्देशिका में फ़ाइल नाम के साथ दिनांक बना देगा।
विमुदे

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) + प्रिंसेसस्क्रीन दबाते हैं तो यह आपके क्लिपबोर्ड पर सक्रिय विंडो का स्क्रीनशॉट डाल देगा।

i3-msg -t get-tree को i3 से json के रूप में सभी विंडो मिलती हैं, फिर हम focussed विंडो की विंडो आईडी प्राप्त करने के लिए jq का उपयोग करते हैं। हम इसे आयात करने के लिए इमेजमैगिक्स पास करते हैं और परिणाम को xिप करने के लिए पाइप करते हैं जो इसे क्लिपबोर्ड पर रखेगा!


2

लपट एक सभ्य विकल्प है।

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

आप -p /path/to/directoryसहेजने की निर्देशिका को चुनने के लिए विकल्प का उपयोग कर सकते हैं ।


1

एक बहुत ही सरल विकल्प यदि आपने इसे स्थापित किया है या इसे स्थापित करने में कोई आपत्ति नहीं है तो xfce4- स्क्रीनशूटर का उपयोग कर रहा है और i3 विन्यास होगा:

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

कैविएट: हालांकि काफी हल्के होते हैं अगर आप किसी अन्य xfce4 प्रोग्राम का उपयोग नहीं कर रहे हैं तो कुछ निर्भरताएं हैं


1

मैम का इस्तेमाल करें । यह अधिक सक्रिय रूप से विकसित है और स्लोप पर निर्भर करता है जो बेहतर है।

स्क्रोट का उपयोग न करें। इसका सिलेक्शन बॉक्स भ्रष्ट हो जाता है और एक अपडेटिंग विंडो (हॉप कहो) का उपयोग करने पर स्क्रीनशॉट में एक छाप छोड़ देता है (आकार बदलने के दौरान भी बॉक्स विकृत)।


(१) "सुस्त" क्या है? (२) क्या, वास्तव में, क्या यह बेहतर है? (३) क्यों?
जी-मैन का कहना है कि 'मोनिका'

1. चुनें ऑपरेशन, खिड़की क्षेत्रों का चयन करने के लिए उपयोग किया जाता है [ github.com/naelstrof/slop] 2. यह स्क्रोट से बेहतर है क्योंकि यह चयन बॉक्स भ्रष्टाचार से नहीं गुजरता है (htop पर स्क्रोट आज़माएं)। 3. ईद।
रितिक H

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 पर आसानी से स्थापित नहीं किया जा सकता है (संपादन उपकरण अनुपलब्ध पुस्तकालय पर निर्भर करता है; कस्टम पीपीए आज तक नहीं)। उदास।
राफेल

1

यह perl6 स्क्रिप्ट रूट, एरिया, विंडो या डिले स्क्रीनशॉट्स को इंपोर्ट के जरिए लेती है और उन्हें एक $ फाइल और क्लिपबोर्ड में सेव करती है।

#!/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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.