मल्टी मॉनिटर सेटअप में xset का उपयोग करके मॉनिटर को स्टैंडबाय कैसे करें?


10

एक साथ काम करते हुए दो या दो से अधिक मॉनीटर होने के दौरान, क्या कोई तरीका है जैसे कि एक कमांड जारी करके स्टैंडबाय / सस्पेंड करने का कोई तरीका है xset dpms force suspend:? या उस उद्देश्य के लिए एक समय निर्धारित है जैसे: xset dpms 100 0 0जो इन मॉनिटरों पर अलग से काम करता है?

मुझे एक-दूसरे के साथ काम करने वाले दो मॉनिटर मिले हैं, eDP1 (मेरा लैपटॉप) और VGA1 (एक बाहरी मॉनिटर)।

मैं उनमें से प्रत्येक को सस्पेंड / स्टैंडबाय मोड में अलग से जाना चाहता हूं यदि मैं उनके साथ सीधे बातचीत नहीं कर रहा हूं, तो मान लीजिए कि मैं वीजीए 1 पर एक फिल्म देख रहा हूं, और एक घंटे और आधा ईडीपी 1 कुछ भी नहीं करने पर है।

मुझे उपयोग करने में कोई दिलचस्पी नहीं है xrandor --off --output eDP1क्योंकि यह काम करने के लिए पर्याप्त तेज़ नहीं है।

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

  • रनिंग: उबंटू 18.04
  • विंडो मैनेजर: ओपनबॉक्स

क्या यह ऊर्जा कारणों के लिए है, या एक दृश्य समाधान करेगा?
जैकब व्लिजम

@ रेवेक्सिना प्रश्न, आपका eDP1 बैकलाइट कितनी दूर जाता है? क्या यह सभी तरह से चमक को बंद कर देता है? यदि हाँ, तो क्या आप उन दो आदेशों का परीक्षण कर सकते हैं, जो मैंने askubuntu.com/a/814043/295286 उत्तर में दिए थे? प्रतिक्रिया के लिए अग्रिम धन्यवाद
सर्गी कोलोडियाज़नी

1
@ रेवेक्सिना ने किया, यह त्रुटिपूर्ण रूप से काम करता है, लेकिन इसे एक दिन के लिए चालू रखेंगे, आज रात देर से पोस्ट करेंगे। यह प्रति स्क्रीन गतिविधि पर रिकॉर्ड रखेगा, लेकिन वर्तमान में सही माउस को स्क्रीन पर बंद / स्विच ऑफ कभी नहीं करेगा?
जैकब व्लिजम

1
ठीक है, अच्छी तरह से मैं शायद सप्ताहांत पर विंडो ट्रैकिंग को लागू करने की कोशिश करूंगा। अफसोस की बात यह है कि मेरे पास अभी इन चीजों से निपटने का ज्यादा समय नहीं है।
सर्गी कोलोडियाज़नी

1
@ रेवेक्सिना, धन्यवाद। मैं शायद जल्द ही एक और (वैल) संस्करण पोस्ट करूंगा, जो सक्रिय विंडो या (यदि कोई मान्य विंडो नहीं है) माउस क्रिया द्वारा ट्रिगर किया गया है। यह भी देखेंगे कि क्या हम बैकलाइट के साथ कुछ कर सकते हैं, जो शायद कुछ ऊर्जा भी बचाएगा। बोनस के दौरान का समय बहुत कम है, लेकिन सवाल थोड़ा और आगे बढ़ने के लिए पर्याप्त है। जारी रहती है। एक बार फिर से धन्यवाद।
जैकब व्लिजम

जवाबों:


5

व्यक्तिगत मॉनीटर को नियंत्रित करना xset (और X11 वास्तव में) के साथ संभव नहीं है

जैसा कि शीर्षक से पता चलता है, यह कैसे xset बनाया जाता है और X11 कार्यों के कारण इसका उपयोग करना संभव नहीं है । यदि हम सोर्स कोड को देखते हैं, तो xsetकॉल DPMSForceLevel(dpy,DPMSModeSuspend)( लाइन 557 ), और डिस्प्ले वेरिएबल फंक्शन ( लाइन 203 ) dpyसे आता है , और यह परिभाषा के अनुसार है :XOpenDisplay()

एक सर्वर, जिसमें इसकी स्क्रीन और इनपुट डिवाइस होते हैं, एक डिस्प्ले कहलाता है।

दूसरे शब्दों में, xsetपूरे डिस्प्ले पर विश्व स्तर पर सेटिंग्स लागू होती हैं, न कि व्यक्तिगत स्क्रीन पर। xsetकाम करने के लिए स्रोत कोड को बदलना आवश्यक होगा । DPMS एक्सटेंशन ज्यादातर खुद को केवल संपूर्ण डिस्प्ले कहते हैं, व्यक्तिगत स्क्रीन नहीं। इसलिए X11 लाइब्रेरी के साथ कस्टम कोड लिखना भी संभव नहीं है।

/sysसबसिस्टम के माध्यम से उस सेटिंग को मैन्युअल रूप से नियंत्रित करना भी काम नहीं करता है

$ sudo bash -c 'echo Off > /sys/class/drm/card0-VGA-1/dpms'
[sudo] password for admin: 
bash: /sys/class/drm/card0-VGA-1/dpms: Permission denied

जब कुंजी या माउस ईवेंट होते हैं, तो DPMS मोड से स्क्रीन भी निकाल ली जाती है, इसलिए यह विचार करते हुए कि आप अपना माउस ले जाना चाहते हैं या कीबोर्ड का उपयोग करना चाहते हैं, या तो उन क्रियाओं के कारण मॉनिटर DPMS मोड को छोड़ देगा।

वैकल्पिक समाधान

सबसे अच्छा विकल्प (और वास्तव में शारीरिक रूप से काम करने वाला समाधान है) xrandr- इसका उपयोग व्यक्तिगत "आउटपुट" को नियंत्रित करने के लिए किया जा सकता है। विशेष रूप से,

xrandr --output VGA-1 -off

उस आउटपुट को बंद कर देगा। हां, आपने उल्लेख किया है कि आप इस समाधान का उपयोग नहीं करना चाहते हैं क्योंकि यह बहुत तेज़ नहीं है, हालांकि अब तक यह सबसे अच्छा उपलब्ध है। इसके कुछ फायदे हैं:

  • कुंजी और माउस घटनाओं के लिए प्रतिरक्षा
  • स्वतंत्र रूप से विपरीत स्थिति को नियंत्रित करता है xset

xrandr --output VGA-1 --brightness 0.1इस तरह से स्क्रीन है कि यह बंद प्रकट होता है colorize जाएंगे, भले ही --brightnessएक सॉफ्टवेयर समाधान है, इसलिए प्रदर्शन वास्तव में हार्डवेयर स्तर पर मंद कर नहीं है, और न ही यह हार्डवेयर स्तर पर बंद है। हालाँकि, यह स्क्रीन को खाली करने का काम करता है और कुंजी / माउस घटनाओं के लिए प्रतिरोधी भी है।

मैंने मेट और बुग्गी स्क्रीनसेवर के स्रोत कोड को देखा है, जो कि GNOME स्क्रीनसेवर के दोनों कांटे हैं, हालांकि या तो मामले में वे एक सॉफ्टवेयर समाधान प्रतीत होते हैं, क्योंकि स्रोत कोड में DPMS का कोई उल्लेख नहीं है।


मुझे विकल्प पसंद हैं ... +1
Fabby

1
@ फेबी धन्यवाद :) अब तक का सबसे अच्छा विकल्प उपलब्ध है
सर्गी कोलोडाज़नी

मुझे लगता है कि विंडो मैनेजर्स कुछ ट्रिक्स कर रहे हैं और कुछ हुक प्रदान कर सकते हैं। एक स्टैक एक्सचेंज साइट है जिसे "सॉफ्टवेयर डिज़ाइन" कहा जाता है और यह विचार को फ्लोट करने के लिए एक अच्छी जगह हो सकती है कि जब एक प्रमुख विंडो (जैसे वेब ब्राउज़र नहीं बल्कि कॉन्की या टॉप बार प्रदर्शित होने का समय) 10 मिनट से अधिक कहने पर कोई पिक्सेल परिवर्तन नहीं होता है। संपूर्ण मॉनीटर (सिर्फ एक सिंगल) 30 सेकंड में मंद होना शुरू होता है जब तक कि यह पूरी तरह से काला न हो। फिर उस मॉनिटर पर माउस को नेविगेट करना (मैं आमतौर पर 3 मॉनिटर का उपयोग करता है) 1 से 5 सेकंड की अवधि में धीरे-धीरे चमक को पुनर्स्थापित करता है।
WinEunuuchs2Unix

@ WinEunuuchs2Unix मेरे पास एक विचार है और देखने के लिए कुछ चीजें हैं, लेकिन यह मुश्किल है, और हाँ प्रश्न में विंडो प्रबंधक पर निर्भर करता है। समस्या DPMS है। यह या तो सब कुछ मंद है या DPMS के साथ कुछ भी नहीं है। सबसे अच्छा हम xrandr --offअभी के लिए कर सकते हैं
सेर्गेई कोलोडियाज़नी

मेरा DPMS ज्ञान सीमित है। मुझे लगता है कि यह स्थिर / नींद के लिए एक बिजली बचाने वाली चीज है। एचडीएमआई-सीईसी भी है जो समान परिणाम दे सकता है लेकिन यह मेरे लिए जादू के एक ब्लैक होल से भी अधिक है। मुझे नहीं पता कि क्या xrandr -offमॉनीटर भी बंद हो जाता है। यह brightnessशून्य पर सेट के समान हो सकता है? यह एक और मुद्दा है जो मेरे पास 24/7 चलने वाला एक कार्यक्रम है जो 3 मॉनिटरों के लिए व्यक्तिगत रूप से चमक और गामा सेट करता है जो कि विंडोज भी नहीं कर सकता है। निश्चित नहीं कि नाइट लाइट, रेड शिफ्ट या फ्लक्स करें। वैसे भी उन कार्यक्रमों को xrandr बंद गड़बड़ हो सकती है। सट्टा
लगाने के

4

सालों तक मेरे पास अपना लैपटॉप सेटअप था, जब ढक्कन बंद होता है तो लैपटॉप निलंबित हो जाता है और बाहरी मॉनिटर खाली हो जाते हैं।

बाहरी मॉनिटर पर 90 मिनट के लिए एक वीडियो देखना चाहते हैं और लैपटॉप स्क्रीन खाली होने के आपके कारण के लिए मैंने ढक्कन बंद विकल्प को "डू नथिंग" में बदल दिया है:

  • फायदा: जब मैं लैपटॉप का ढक्कन बंद करता हूं तो सभी लैपटॉप विंडो फुल स्क्रीन वीडियो से नीचे चली जाती हैं।
  • फायदा: जब मैं लैपटॉप के ढक्कन खोलती हूं तो विंडोज को रिस्टोर किया जाता है और यह फुल स्क्रीन वीडियो से नीचे नहीं होता है।
  • नुकसान: मुझे गियर मेनू से निलंबन का चयन करने के लिए शीर्ष बार मेनू तक पहुंचने के लिए वीडियो गैर-पूर्ण स्क्रीन बनाना होगा।
  • लाभ: जब सिस्टम बाहरी मॉनिटर पर मेनू द्वारा निलंबित कर दिया जाता है, तो लैपटॉप का ढक्कन खोलना अभी भी सिस्टम को फिर से शुरू करता है।

मैं बाहरी मॉनिटर के लिए DPMS का उपयोग नहीं कर रहा हूं, लेकिन आप अपनी सेटिंग्स को xset qकमांड से देख सकते हैं:

$ xset q
Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000002
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    on     02: Scroll Lock: off
    03: Compose:     off    04: Kana:        off    05: Sleep:       off
    06: Suspend:     off    07: Mute:        off    08: Misc:        off
    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
    12: Group 2:     off    13: Mouse Keys:  off
  auto repeat delay:  500    repeat rate:  33
  auto repeating keys:  00ffffffdffffbbf
                        fadfffefffedffff
                        9fffffffffffffff
                        fff7ffffffffffff
  bell percent:  50    bell pitch:  400    bell duration:  100
Pointer Control:
  acceleration:  5/1    threshold:  5
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  0    cycle:  0
Colors:
  default colormap:  0xb3    BlackPixel:  0x0    WhitePixel:  0xffffff
Font Path:
  /usr/share/fonts/X11/misc,/usr/share/fonts/X11/Type1,built-ins
DPMS (Energy Star):
  Standby: 0    Suspend: 0    Off: 0
  DPMS is Disabled

इन पंक्तियों पर ध्यान दें:

Screen Saver:
  prefer blanking:  yes
  • आप जरूर चाहेंगे prefer blanking: no

इन पंक्तियों पर भी ध्यान दें:

DPMS (Energy Star):
  Standby: 0    Suspend: 0    Off: 0
  DPMS is Disabled
  • आप जब चाहें तब DPMS is enabledमॉनिटर सेट करना चाहेंगे Standby

उम्मीद है कि अन्य उपयोगकर्ताओं ने इन विकल्पों का उपयोग किया है और आपके लिए एक विस्तृत उत्तर पोस्ट करेंगे।


4

कैसे के बारे में बस लैपटॉप बंद?

क्यों?

ये दो मॉनिटर एक डिस्प्ले एरिया हैं इसलिए एक को बंद करने से स्क्रीन रिड्रेसिंग, मुख्य मॉनिटर पर जाने वाले एप्लिकेशन जैसे कई समस्याएं पैदा हो जाएंगी ...

(मैं कुछ साल पहले उस सड़क से नीचे गया था और एकमात्र विश्वसनीय तरीका जो मुझे करना था वह वह है जो बाहरी मॉनिटर पर बटन को पुश करना है या लैपटॉप को बंद करना है)

बस ये सुनिश्चित करें कि आप इन पावर सेटिंग्स को सेट करें gsettings set:

org.gnome.settings-daemon.plugins.power lid-close-suspend-with-external-monitor false
org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'

वास्तव में, यह एक अच्छा समाधान है। हार्डवेयर, प्लस यह स्क्रिप्टेड हो सकता है। हालांकि, ओपी ओपनबॉक्स का उपयोग कर रहा है, जो बताता है कि gsettings प्रभावी नहीं हो सकते हैं। अच्छे विकल्प के लिए, आप unix.stackexchange.com/a/52645/85039
Sergiy Kolodyazhnyy

4

अस्थायी टिप्पणी

  1. ओपी के अनुरोध पर, मैंने स्क्रीन को स्विच ऑफ के माध्यम से नीचे स्क्रिप्ट बनाया xrandr। एक लंबे परीक्षण पर, यह बहुत बुरी तरह से काम किया। इतना अधिक स्विचिंग विफल नहीं हुआ, लेकिन स्क्रीन को पुन: सक्रिय करने पर, स्क्रीन लेआउट पूरी तरह से गड़बड़ हो गया था। मुझे यह देखने के लिए पोस्ट करने में खुशी होगी कि क्या यह आपके मामले में काम करता है, लेकिन मेरी सलाह इसका उपयोग करने की नहीं है।
    स्क्रिप्ट में, मैं चमक को वापस सेट करने के बजाय शून्य पर चला गया।
  2. वेदर पर कुछ चर्चा हुई थी कि हमें माउस स्थान या सक्रिय विंडो के स्थान पर सक्रिय मॉनिटर को परिभाषित करना चाहिए । यदि कोई खिड़की मौजूद नहीं है तो बाद वाला काम नहीं करेगा। हमारे पास बिल्कुल भी एक विंडो नहीं हो सकती है (केवल डेस्कटॉप के अलावा) जिस स्थिति में विंडो को ब्लैक आउट करने का विकल्प यादृच्छिक होगा (या यदि हम अपवाद को शामिल नहीं करेंगे तो ब्रेक)। IMO एकमात्र विकल्प है जो समझ में आता है -और सभी मामलों में एक पूर्वानुमानित तरीके से काम करेगा- माउस स्थिति द्वारा सक्रिय स्क्रीन को परिभाषित करना है। इसके अलावा, यह भी है कि खिड़की प्रबंधक कैसे तय करता है कि नई खिड़कियां कहां दिखाई दें।

फिर मैंने इस संस्करण में क्या परिवर्तन किया?
निष्क्रिय समय को अब डिफ़ॉल्ट रूप से कीबोर्ड और माउस गतिविधि दोनों द्वारा परिभाषित किया गया है। जागना भी एक द्वारा किया जाता है।


स्वचालित रूप से निष्क्रिय स्क्रीन मंद

जैसा कि मेरे साथी उत्तरदाताओं ने कहा, अलग से क्ली से स्क्रीन स्विच करना एक चुनौती है, और मुझे कोई विकल्प नहीं मिला।

जो मैंने पाया वह सभी स्क्रीन को स्वचालित रूप से मंद करने का एक तरीका है , सिवाय एक के जहां माउस है, एक्स समय के बाद।

ये रहा

#!/usr/bin/env python3
import subprocess
import gi
gi.require_version("Gdk", "3.0")
from gi.repository import Gdk
import time
import sys


def get_idle():
    try:
        return int(subprocess.check_output("xprintidle")) / 1000
    except subprocess.CalledProcessError:
        return 0


def get_monitors():
    screen = Gdk.Screen.get_default()
    n_mons = display.get_n_monitors()
    mons = [screen.get_monitor_plug_name(i) for i in range(n_mons)]
    return mons


def set_mon_dimmed(mon, dim):
    print(mon, dim)
    val = "0.0" if dim else "1"
    try:
        subprocess.Popen(["xrandr", "--output", mon, "--brightness", val])
    except subprocess.CalledProcessError:
        print("oops")


def mousepos():
    # find out mouse location
    return Gdk.get_default_root_window().get_pointer()[1:3]


def get_currmonitor_atpos(x, y, display=None):
    """
    fetch the current monitor (obj) at position. display is optional to save
    fuel if it is already fetched elsewhere
    """
    if not display:
        display = Gdk.Display.get_default()
    return display.get_monitor_at_point(x, y)


display = Gdk.Display.get_default()
wait = int(sys.argv[1])
elapsed = 0
# set intervals to check
res = 2
monitors = [m for m in get_monitors()]
for m in monitors:
    set_mon_dimmed(m, False)

monrecord = {}
for m in monitors:
    monrecord[m] = {"idle": 0, "dimmed": False}

display = Gdk.Display.get_default()
idle1 = 0


while True:
    time.sleep(res)
    curr_mousepos = mousepos()
    activemon = get_currmonitor_atpos(
        curr_mousepos[0], curr_mousepos[1]
    ).get_model()
    idle2 = get_idle()
    if idle2 < idle1:
        monrecord[activemon]["idle"] = 0
        if monrecord[activemon]["dimmed"]:
            set_mon_dimmed(activemon, False)
            monrecord[activemon]["dimmed"] = False

    for m in monrecord.keys():
        curr_idle = monrecord[m]["idle"]
        print(m, curr_idle)
        if all([
            curr_idle > wait,
            monrecord[m]["dimmed"] is not True,
            m != activemon
        ]):
            set_mon_dimmed(m, True)
            monrecord[m]["dimmed"] = True         
        else:
            if m != activemon:
                monrecord[m]["idle"] = curr_idle + res

    idle1 = idle2

स्थापित कैसे करें

सेट अप सीधा है:

  1. सुनिश्चित करें कि आपके पास दोनों python3-giऔर xprintidleस्थापित हैं

    sudo apt install python3-gi xprintidle
    
  2. एक खाली फ़ाइल में ऊपर स्क्रिप्ट को कॉपी करें, इसे सहेजें dim_inactive, और इसे निष्पादन योग्य बनाएं

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

    /path/to/dim_inactive <idle_time_in_seconds>
    

    एक उदाहरण:

    /path/to/dim_inactive 120
    

    दो मिनट के बाद माउस नहीं है, जहां सभी स्क्रीन मंद हो जाएगा

अतिरिक्त जानकारी / स्पष्टीकरण

  • स्क्रिप्ट स्टार्टअप पर सभी स्क्रीन को सूचीबद्ध करती है
  • यह रिकॉर्ड रखता है यदि मॉनिटर के अनुसार निष्क्रिय समय (संभवतः 2 से अधिक)। यदि कोई मॉनीटर x सेकंड के लिए एक्सेस नहीं किया जाता है, तो मॉनीटर जहां माउस है , के अलावा इसे ब्लैक आउट कर दिया जाता है
  • एक अच्छी (लेकिन खराब) परंपरा के अनुसार, गनोम सामान तोड़ता रहता है और एपीआई के परिवर्तन को जारी रखता है। नतीजतन, इस स्क्रिप्ट को 19.04 और इसके बाद के संस्करण पर चलाने के बाद, आपको थोड़ी सी चेतावनी मिल जाएगी। उसी समय, यह PEP8 पर नहीं टूटता है। फिर भी नवीनतम एपीआई के लिए अद्यतन करेगा।

बहुत अच्छा, लगभग ऐसा ही कुछ लिखने के लिए ललचाता है। लेकिन मुझे लगता है कि यहाँ दोहराया विषय है - अब तक सॉफ्टवेयर समाधान के माध्यम से अन्य प्रदर्शन को कम करने से बेहतर कुछ भी नहीं है, कुछ भी नहीं है हार्डवेयर
सर्ग कोलिआदज़नी

@SergiyKolodyazhnyy नाह, केवल बैकलाइट कुछ जोड़ देगा, लेकिन यह अब तक जहाँ तक मैं देख सकता हूँ। सोचें कि कुछ संभव होना चाहिए, लेकिन शायद ठंड शुरू हो जाएगी, जैसे xrandr --offमुझे लगता है।
जैकब व्लिजम

@JacobVlijm हाँ, xrandr --offइस मामले में मैं क्या पसंद करूँगा। खासकर जब से वीजीए बैकलाइट को सॉफ्टवेयर-नियंत्रित नहीं किया जा सकता है।
सेर्गेई कोलोडियाज़नी

आपके सभी प्रयासों के लिए धन्यवाद, लेकिन मुझे सबसे अजीब व्यवहार मिल रहा है ... उदाहरण के लिए: यह मॉनिटर को मंद करता है लेकिन 1किसी भी परिस्थिति में वापस चमक को रीसेट नहीं करता है। जब मैं कीबोर्ड का उपयोग करते हुए बाहरी प्रदर्शन के साथ बातचीत कर रहा होता हूं और माउस मुख्य प्रदर्शन में होता है, बाहरी व्यक्ति निष्क्रिय समय के बाद काला हो जाता है। जब मेरे पास मुख्य डिस्प्ले के साथ कोई इंटरेक्शन नहीं होता है, लेकिन माउस होता है तो वहां ऐसा कुछ नहीं होता है और जब मैं माउस को दूसरे डिस्प्ले में ले जाता हूं तो एक इम्मिन ब्लैक हो जाता है।
रवेक्सिना

@ रेवेक्स (1) क्या आपके मॉनिटर मिरर किए गए हैं? यदि नहीं, तो हो सकता है कि आपने स्क्रिप्ट को दूसरी स्क्रीन के साथ बंद कर दिया हो। अभी तय किया है। (2) सक्रिय स्क्रीन को परिभाषित क्यों किया जाता है मेरे माउसपॉप को अस्थायी टिप्पणी के [2] में समझाया गया है (3) को भी (1) (उसी कारण) में परिवर्तन के साथ तय किया जाना चाहिए, नहीं, निष्क्रिय समय को रीसेट करने की आवश्यकता है, क्या करेंगे वह आज बाद में।
जैकब वलीजम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.