क्या मैं एकता में कस्टम कमांड चलाने के लिए हॉट कॉर्नर सेट कर सकता हूं?


13

मुझे वास्तव में हॉट कॉर्नर्स पसंद हैं। :-)

क्या नीचे दिखाए गए अनुसार गर्म कोने पर कस्टम कमांड चलाना किसी तरह संभव है?

यहाँ छवि विवरण दर्ज करें


मुझे नहीं लगता कि हॉटकोकर्स के साथ यह विशेष रूप से संभव है (कम से कम जिस तरह से एकता उनका उपयोग करती है, उसके साथ नहीं), लेकिन जब स्क्रीन के विशिष्ट क्षेत्र में माउस रखा जाता है, तो स्क्रिप्ट को ट्रिगर करना संभव है। उदाहरण के लिए, askubuntu.com/a/758307/295286 , कार्रवाई अनुभाग पर माउस देखें । मैं हॉटकॉर्नर में अधिक देखूंगा, लेकिन अगर वे काम नहीं करेंगे, तो कस्टम स्क्रिप्ट ठीक है?
सर्गी कोलोडियाज़नी

मल्टी-मॉनिटर या सिंगल?
याकूब Vlijm

हाय ऑर्किरो, पोस्ट किया गया। कृपया उल्लेख करें कि क्या सब स्पष्ट है (या नहीं)।
जैकब व्लिजम

अरे, मैं देख रहा हूं कि मेरे जवाब की तुलना में यहां अधिक हॉटकॉर्नर हैं। आप कितने को प्राथमिकता देंगे?
याकूब Vlijm

2
@JacobVlijm, सर्ग, मेरा जवाब देखें।
वंजेंड्रिया

जवाबों:


10

CCSM

  1. CompizConfig Settings Manager (CCSM) स्थापित करें। टर्मिनल में चलाएं:

    sudo apt-get install compizconfig-settings-manager
  2. CCSM खोलें।

  3. "कमांड" पर जाएं
  4. किसी एक स्लॉट में अपना इच्छित कमांड डालें। उदाहरण के लिए:

    CCSM स्क्रीनशॉट - कमांड

  5. "एज बाइंडिंग" टैब पर जाएं

  6. "कोई नहीं" पर क्लिक करें और अपना वांछित हॉट कॉर्नर (या किनारे) सेट करें, जो आपके द्वारा सेट किए गए कमांड से मेल खाती है

    CCSM स्क्रीनशॉट - गर्म कोने

  7. अपने माउस को कोने में ले जाएँ

  8. अब आपकी आज्ञा चलती है!

    CCSM स्क्रीनशॉट - कमांड रनिंग

14.04 को काम करने की पुष्टि की।


सभी प्रस्तावित समाधानों में सबसे आसान। यदि बेहतर स्क्रिप्ट में वांछित कमांड केवल स्क्रिप्ट की तुलना में उस स्क्रिप्ट या सिर्फ स्क्रिप्टनाम की तुलना में बेहतर स्क्रिप्ट के रूप में है, तो स्क्रिप्ट $ PATH में एक बिन फ़ोल्डर में है। केवल संभव नकारात्मक पक्ष है एकता / compiz को अनियमित रूप से 'खो' उपयोगकर्ता सेट कमांड्स के लिए जाना जाता है, अर्थात, जो एकीकृत नहीं हैं। उपयोगकर्ता कमांड को कैसे एकीकृत किया जाए, इस सवाल के दायरे से परे है।
डौग

@wjandrea तो यह सब के बाद लागू किया गया है। Compiz मुझे विस्मित करने के लिए जब्त नहीं करता है। अच्छा जवाब, ओपी जो चाहता है उसके लिए सबसे उपयुक्त। + 1'ed
सर्गी Kolodyazhnyy

दुर्भाग्य से, आप सही हैं, हाहा। हाँ बिल्कुल वही जो ओपी ने मांगा था।
जैकब व्लिजम

आपने अपने संपादन और उत्तरों के साथ मुझे कई बार मदद की है। "कुकी" के रूप में ओले'सर्ग कहते थे ... वास्तव में आधा दर्जन है :)
WinEunuuchs2Unix

6

कस्टम कमांड

यदि आप एकता का उपयोग कर रहे हैं और ccsm स्थापित किया है, तो wjandrea का उत्तर निश्चित रूप से आपका उत्तर है। यदि नहीं , या अन्य डिस्ट्रोस पर उपयोग करने के लिए, एक हल्के वजन विकल्प उपयोगी हो सकता है।

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

एक उदाहरण के रूप में, मैंने निम्नलिखित सेटअप बनाया:

  • शीर्ष वाम कोई क्रिया नहीं
  • टॉप राइट रन गेदिट
  • नीचे बाएँ कोई क्रिया नहीं
  • निचला राइटरन गनोम-टर्मिनल

बेशक आप कमांड को बाहरी स्क्रिप्ट चलाने के लिए भी कर सकते हैं।

इसके अलावा, आप लाइन में गर्म कोने का आकार निर्धारित कर सकते हैं :

cornersize = 10

बस मान (पिक्सेल) बदलें। स्क्रिप्ट आपके आदेशों को ट्रिगर करने के लिए (वर्ग) क्षेत्र निर्धारित करती है:

यहाँ छवि विवरण दर्ज करें

लिपी

#!/usr/bin/env python3
import subprocess
import time

cornersize = 20

commands = [
    None,
    "gedit",
    None,
    "gnome-terminal",
    ]

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def get_pos():
    return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]

scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]

match1 = None

while True:
    time.sleep(1)
    xy = get_pos()
    x = xy[0]; y = xy[1]
    test = [
        [x < cornersize, y < cornersize],
        [x > res[0]-cornersize, y < cornersize],
        [x < cornersize, y > res[1]-cornersize],
        [x > res[0]-cornersize, y > res[1]-cornersize],
        ]
    match2 = [i for i, p in enumerate(test) if all(p)]
    if match2 != match1:
        if match2:
            cmd = commands[match2[0]]
            if cmd:
                subprocess.Popen(["/bin/bash", "-c", cmd])
    match1 = match2

सेट अप

  1. स्क्रिप्ट की जरूरत है xdotool

    sudo apt install xdotool
  2. एक खाली फ़ाइल में स्क्रिप्ट की प्रतिलिपि बनाएँ, मैं के रूप में सहेजें hotcorners2.py
  3. स्क्रिप्ट के प्रमुख में, अपने आदेश सेट करें (उद्धरण उद्धरण)

    commands = [
        None,
        "gedit",
        None,
        "gnome-terminal",
    ]

    (बाद में ऊपर बाएँ / righ, नीचे बाएँ / दाएँ)

  4. टेस्ट- स्क्रिप्ट चलाएँ:

    python3 /path/to/hotcorners2.py
  5. यदि सभी ठीक काम करते हैं, तो स्टार्टअप एप्लिकेशन में जोड़ें: डैश> स्टार्टअप एप्लिकेशन> जोड़ें। कमांड जोड़ें:

    /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"

टिप्पणियाँ

  • स्क्रिप्ट वर्तमान में (पहली) स्क्रीन पर चलती है। इसे कई स्क्रीन्स की देखभाल के लिए आसानी से एडिट किया जा सकता है, यहां तक ​​कि अलग-अलग स्क्रीन्स में अलग-अलग चीजें करने के लिए, कृपया उल्लेख करें।
  • यदि कुछ लोग इसे पसंद करते हैं, तो हम सुविधाजनक उपयोग और आसान स्थापना के लिए एक gui और एक ppa जोड़ सकते हैं।

संपादित करें

यदि हम थोड़ा अधिक उन्नत कंप्यूटिंग का उपयोग करते हैं, तो हम कमांड्स को ट्रिगर करने के लिए एक वर्ग क्षेत्र के बजाय एक त्रिज्या का उपयोग कर सकते हैं (अच्छे पुराने @ पाइथागोरस के लिए धन्यवाद):

यहाँ छवि विवरण दर्ज करें

छोटे अंतर, लेकिन सिर्फ मनोरंजन के लिए:

लिपी

#!/usr/bin/env python3
import subprocess
import math
import time

# set distance (hotcorner sensitivity)
radius = 20

# top-left, top-right, bottom-left, bottom-right
commands = [
    None,
    "gedit",
    None,
    "gnome-terminal",
    ]

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def get_pos():
    return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]

# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]

match1 = None

while True:
    time.sleep(1)
    pos = get_pos()
    # get the current difference from the mousepointer to each of the corner (radius)
    diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
            for c in corners]
    # see if any of the corners is "approached" within the radius
    match2 = [diff.index(n) for n in diff if n < radius]
    # if so, and the corresponding command is not set to None, run it.
    if all([match2 != match1, match2]):
        cmd = commands[match2[0]]
        if cmd:
            subprocess.Popen(["/bin/bash", "-c", cmd])
    match1 = match2

प्रयोग

बहुत अधिक समान है। स्क्रिप्ट के मुख्य भाग में, अपने कमांड्स और त्रिज्या को ट्रिगर करने के लिए सेट करें।


5

ध्यान दें:

wjandrea का जवाब किसी ऐसे व्यक्ति के लिए सबसे उपयुक्त उत्तर है जो डिफ़ॉल्ट Ubuntu या Ubuntu Kylin का उपयोग करता है (या उनके प्रदर्शन प्रबंधक के रूप में compiz है), इस प्रकार यह मेरा उत्थान और सम्मान प्राप्त करता है। नीचे दिया गया उत्तर, एकता पर भी इस्तेमाल किया जा सकता है, लेकिन शायद थोड़ा बेमानी होगा। हालाँकि, डेस्कटॉप वातावरण में, जो संकलित नहीं है, एक नीचे दिए गए संकेतक का उपयोग कर सकता है। मैंने इसे लुबंटू 16.04 वीएम में संक्षेप में परीक्षण किया है, इसलिए मुझे पता है कि यह वहां काम करता है, और इसे काइलिन 14.04 के साथ भी संगत किया। GNOME और MATE डेस्कटॉप के लिए, आपको किसी भी संकेतक का उपयोग करने के लिए पहले सक्षम किए गए AppIndicators के लिए समर्थन की आवश्यकता होगी।

परिचय

मैंने लागू किया है indicator-edgerजो स्क्रीन के 4 किनारों के साथ कहीं भी माउस की स्थिति के आधार पर उपयोगकर्ता-परिभाषित कमांड को ट्रिगर करने की अनुमति देता है। मूल संस्करण एक दिन के भीतर किया गया था, लगभग 7 घंटे में, इस प्रकार यह काफी न्यूनतर है लेकिन काम करता है।

यहाँ छवि विवरण दर्ज करें

संकेतक को ~/.edger-commands.jsonफ़ाइल के माध्यम से नियंत्रित किया जाता है, जाहिर है jsonप्रारूप में। यह उपयोगकर्ता द्वारा मैन्युअल रूप से लिखा जा सकता है, या संकेतक के DEFINE COMMANDSविकल्प के माध्यम से सेट किया जा सकता है । सक्षम / अक्षम ट्रिगर विकल्प को उपयोगकर्ता की सुविधा के लिए फाइल करने के लिए स्वचालित रूप से याद और लिखा जाता है। नमूना विन्यास फाइल इस तरह होगी:

{
    "right": "gnome-terminal",
    "top": "firefox",
    "left": "",
    "bottom": "gnome-screenshot",
    "enabled": true
}

"left"फ़ाइल में प्रविष्टि पर ध्यान दें । यह किनारा परेशान है, लेकिन jsonसिंटैक्स के कारण इसे वहां एक खाली स्ट्रिंग की आवश्यकता है, अर्थात उद्धरण ""

एक बार जब संकेतक यह पता लगा लेता है कि उपयोगकर्ता ने माउस को किसी भी किनारे (~ 3 पिक्सेल मार्जिन) के साथ रखा है, तो संकेतक एक बुलबुला सूचना भेजेगा और उपयुक्त कमांड (यदि परिभाषित हो) चलाएगा। ट्रिगर को सक्रिय नहीं करेगा, जब तक कि उपयोगकर्ता माउस को किनारे से दूर नहीं ले जाता।

यहाँ छवि विवरण दर्ज करें

जैसा कि आप ऊपर दिए गए स्क्रीनशॉट से देख सकते हैं, संकेतक में कमांड-लाइन में डीबगिंग आउटपुट भी है। यदि आपको कोई कीड़े मिलते हैं, तो इसे टर्मिनल से चलाने के लिए स्वतंत्र महसूस करें, पता करें कि क्या त्रुटि हुई है, और परियोजना के गिटहब के मुद्दों पृष्ठ पर उचित बग रिपोर्ट प्रस्तुत करें ।

वर्तमान में कोनों (केवल किनारों) के लिए कोई समर्थन नहीं है और इसे एक-मॉनिटर सेटअप के लिए बनाया गया था (जाहिर है, कोई निर्माण के 7 घंटे के भीतर सभी ठिकानों को कवर नहीं कर सकता है), लेकिन वे सुविधाएँ भविष्य में अंततः उपलब्ध हो सकती हैं।

स्थापना और स्रोत कोड

स्रोत कोड प्रोजेक्ट GitHub पेज पर या लॉन्चपैड के माध्यम से उपलब्ध है । स्थापना टर्मिनल में निम्नलिखित आदेशों के माध्यम से की जाती है:

sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.