लॉन्चर प्लेसमेंट दोहरे-मॉनिटर


5

मेरे पास दो मॉनिटर हैं। मेरे पास कई कार्यस्थान हैं। मैं चाहता हूं कि मेरा लांचर (सेटिंग्स में "लॉन्सर प्लेसमेंट"> एक कार्यक्षेत्र में मेरे दोनों मॉनिटर पर मौजूद हो, लेकिन दूसरे कार्यक्षेत्र में केवल एक लांचर (मुख्य मॉनिटर पर) हो। ऐसा इसलिए है क्योंकि मैं दोनों मॉनिटरों के दौरान ट्वीडेक को फैलाना चाहता हूं और लांचर रास्ते में मिल जाता है। क्या यह संभव है?

कार्यक्षेत्र 1 (अच्छा):

चित्र 1

कार्यक्षेत्र 2 (अच्छा नहीं):

चित्र 2

कार्यक्षेत्र 2 (अच्छा):

चित्र 3


1
क्या आपने इसे स्वचालित रूप से किया होगा (पृष्ठभूमि स्क्रिप्ट की आवश्यकता होती है) या शॉर्टकट कुंजी करना होगा (टॉगल)? लेफ्ट या राइट स्क्रीन?
जैकब व्लिजम

1
कृपया अपनी छवि पुनः लोड करें, और इसे अपनी पोस्ट में दृश्यमान बनाएं
कार्नेंडिल

@carnendil सोच रहा था कि कैसे करें, धन्यवाद!
कोलिन

@JacobVlijm अधिमानतः स्वचालित रूप से, लेकिन यदि शॉर्टकट एकमात्र तरीका है, एह। यह करना होगा। बात यह है कि मैं Tweetdeck पर नियमित रूप से जाँच कर रहा हूँ ताकि कुंजी के संयोजन को दबाने के लिए हर बार थोड़ा असुविधाजनक हो।
कोलिन

@ कोलिन दोनों किया जा सकता है :)
याकूब Vlijm

जवाबों:


5

लांचर के स्थान को कैसे परिभाषित किया जाता है?

लॉन्चर के प्लेसमेंट को कुछ चीजों से परिभाषित किया गया है:

  1. में निर्धारित मूल्य /org/compiz/profiles/unity/plugins/unityshell/num-launchers। आप इसे कमांड द्वारा पढ़ सकते हैं:

    dconf read /org/compiz/profiles/unity/plugins/unityshell/num-launchers

    जो या तो 1(एक स्क्रीन पर लांचर) या 0(सभी स्क्रीन पर लांचर ) आउटपुट देगा ।

    सभी स्क्रीन पर दिखाई देने वाले लांचर को सेट करने के लिए कमांड द्वारा किया जा सकता है:

    dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
  2. यदि मान है 1(केवल एक स्क्रीन पर दिखाई दे रहा है), तो हम निर्धारित स्क्रीन को प्राथमिक स्क्रीन के रूप में , xrandrकमांड के साथ किस स्क्रीन पर लॉन्च कर सकते हैं, सेट कर सकते हैं :

    xrandr --output <screen_name> --primary

वे वास्तव में उपयोग (ओं) से नीचे स्क्रिप्ट (ओं) के आदेश हैं।

Script1; लांचर को केवल बाईं ओर या दोनों स्क्रीन पर (मुख्य शॉर्टकट के साथ) सेट करें

आपके द्वारा स्क्रिप्ट चलाने के तर्क के आधार पर, यह या तो लांचर को कमांड के साथ सभी स्क्रीन पर दिखाने के लिए सेट करता है:

dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0

या केवल एक पर:

dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 1

बाद के मामले में, यह बाईं स्क्रीन को भी प्राथमिक के रूप में सेट करता है।

लिपी

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

key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "

arg = sys.argv[1]

if arg == "left":
    # the launcher is set to show on all screens
    subprocess.Popen(["/bin/bash", "-c", key+"1"])
elif arg == "all":
    # the launcher is set to show only on the left screen
    subprocess.Popen(["/bin/bash", "-c", key+"0"])
    # make sure the left screen is the primary one
    scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
    left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
    subprocess.Popen(["xrandr", "--output", left, "--primary"])

कैसे इस्तेमाल करे

  • एक खाली फ़ाइल में स्क्रिप्ट की प्रतिलिपि बनाएँ, इसे सहेजें launcher_pos.py
  • दोनों कमांड के साथ स्क्रिप्ट का परीक्षण करें (टर्मिनल विंडो से):

    python3 /path/to/launcher_pos.py left

    तथा

    python3 /path/to/launcher_pos.py all
  • यदि सब ठीक काम करता है, तो दो शॉर्टकट कुंजी संयोजनों के लिए कमांड जोड़ें: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और दोनों कमांड को उपलब्ध शॉर्टकट में जोड़ें।

लिपि 2; स्वचालित संस्करण

नीचे दी गई स्क्रिप्ट स्वचालित रूप से नज़र रखती है कि कौन सा वर्तमान कार्यक्षेत्र है (आपके पास कितने वर्कस्पेस हैं और कौन से कॉन्फ़िगरेशन में हैं)।

यह स्क्रिप्ट कार्यस्थानों के साथ चलाई जाती है, जहाँ आप तर्क के रूप में केवल बाईं ओर लॉन्चर चाहते हैं । एक उदाहरण:

यदि आप स्क्रिप्ट को कमांड से चलाते हैं:

python3 /path/to/launcher_pos.py 2 3

परिणाम है:

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

लिपी

import subprocess
import sys
import time

wspace = sys.argv[1:]
key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

res = get_res()

def get_dt():
    # get the current viewport
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

def set_launcher(arg):
    if arg == "left":
        # the launcher is set to show on all screens
        subprocess.Popen(["/bin/bash", "-c", key+"1"])
    elif arg == "all":
        # the launcher is set to show only on the left screen
        subprocess.Popen(["/bin/bash", "-c", key+"0"])
        # make sure the left screen is the primary one
        scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
        left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
        subprocess.Popen(["xrandr", "--output", left, "--primary"])

curr_ws1 = get_dt()

while True:
    time.sleep(1)
    curr_ws2 = get_dt()
    if curr_ws2 != curr_ws1:
        if curr_ws2 in wspace:
            arg = "left"
        else:
            arg = "all"
        set_launcher(arg)
    curr_ws1 = curr_ws2

कैसे इस्तेमाल करे

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

    sudo apt-get install wmctrl
  2. एक खाली फ़ाइल में स्क्रिप्ट की प्रतिलिपि बनाएँ, इसे सहेजें launcher_pos.py

  3. टेस्ट इसे कमांड द्वारा चलाएं:

    python3 /path/to/launcher_pos.py 1 3

    कार्यक्षेत्र 1 और 3 पर, लांचर अब केवल बाईं ओर दिखाई देना चाहिए

  4. यदि सभी ठीक काम करते हैं, तो इसे अपने स्टार्टअप एप्लिकेशन में जोड़ें: डैश> स्टार्टअप एप्लिकेशन> जोड़ें। कमांड जोड़ें:

    /bin/bash -c "sleep 15 && python3 /path/to/launcher_pos.py 1 3"

    (यदि कार्यक्षेत्र 1 और 3 वे हैं जो आप केवल बाईं ओर लॉन्चर चाहते हैं)


बहुत अच्छे धन्यवाद! वही मेरे लिए लागू होता है, मुझे बिस्तर पर सिर की जरूरत है। मैंने आपकी पोस्ट पढ़ी है और यह अब तक अच्छा लग रहा है लेकिन कल मैं इसे और अधिक व्यापक रूप से परीक्षण करूँगा :)
कॉलिन

एक जादू की तरह काम करता है! बहुत बहुत धन्यवाद। और बस ब्याज से बाहर, -c पैरामीटर क्या करता है और क्यों "15 सो"?
कॉलिन

1
@ कोलिन बिल्कुल सही! नींद 15 क्योंकि स्क्रिप्ट का उपयोग करता है xrandr, और यह टूट सकता है अगर यह बहुत जल्द चलता है या गलत रिज़ॉल्यूशन देता है अगर यह स्थानीय स्तर पर (विशेष रूप से कई मॉनिटरों के साथ) सही तरीके से सेट नहीं किया गया है। तब कमान जटिल है और उसे bash( /bin/bash -c)
जैकब व्लिजम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.