कैसे लाइट मॉनिटर के लिए कई प्रस्तावों को सही हल करने के लिए मजबूर करें?


17

मैं BUG से प्रभावित हूँ: https://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241 अन्यथा, यदि आप की तरह मेरे पास भी उच्च संकल्प के दूसरे मॉनिटर से जुड़ा लैपटॉप है, तो LIGHTDM पर लॉगिन चरण, दोनों स्क्रीन में डिस्प्ले को मिरर करता है और डेस्कटॉप के विस्तार के बजाय मेरे मामले में एक सामान्य रिज़ॉल्यूशन (1024X768) को असाइन करता है (मल्टीपल मॉनिटर्स यूएक्स स्पेसिफिकेशन्स बुक में बताए अनुसार, ग्रेटर के साथ प्राइमरी स्क्रीन और सिर्फ एक लोगो के साथ सेकेंडरी। 12.04 के लिए)।

यहाँ मेरा xrandr -q है

@L502X:~$ xrandr -q
Screen 0: minimum 320 x 200, current 1920 x 1848, maximum 8192 x 8192
LVDS1 connected 1366x768+309+1080 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768       60.0*+
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
   1920x1080      60.0*+
   1600x1200      60.0  
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x800       59.8  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        60.0  
DP1 disconnected (normal left inverted right x axis y axis)

मैंने प्रत्येक मॉनिटर के लिए सही रिज़ॉल्यूशन सेट करने और डेस्कटॉप का विस्तार करने के लिए कुछ xrandr कमांड निष्पादित करने के लिए lightdm को बाध्य करने की कोशिश की, इसलिए मैंने /usr/share/lightdmxrand.sh नामक एक सरल स्क्रिप्ट बनाई :

#!/bin/sh
xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1

और इसे चलाने के लिए lightdm से कहा: /etc/lightdm/lightdm.conf

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-setup-script=/usr/bin/numlockx on
display-setup-script=/usr/share/lightdmxrandr.sh

पुनरारंभ किया गया lightdm: sudo restart lightdm और एकता अभिवादन लॉगिन स्क्रीन सही था। उनके संबंधित सही रिज़ॉल्यूशन वाली स्क्रीन और अगर मैं माउस को स्क्रीन पर ले जाता हूं, तो यह लॉगिन बॉक्स और पैनल के साथ फ़ोकस हो जाता है, जबकि अनफोकस्ड स्क्रीन बस एक उबंटू लोगो (एमएम यूएक्स स्पेक बुक में निर्दिष्ट) प्रदर्शित करता है। बहुत खुबस!

यह वर्कअराउंड तब तक बढ़िया काम करता है जब तक बाहरी मॉनिटर लैपटॉप से ​​जुड़ा होता है। उस स्थिति में जहां यह कनेक्ट नहीं है, लॉगिन स्टेज पर, मुझे मिलता है: एक कम ग्राफिक्स मोड ERROR (आप कम ग्राफिक्स मोड में चल रहे हैं, आपकी स्क्रीन, इनपुट डिवाइस ... पता नहीं चला ..)। सामान्य, क्योंकि xrandrएक गैर कनेक्टेड मॉनिटर पर आउटपुट करने की कोशिश करता है।

यहां सवाल यह है कि मुझे स्क्रिप्ट को इस तरह कैसे संशोधित करना चाहिए कि जब बाहरी मॉनिटर xrandrकेवल लैपटॉप स्क्रीन से कनेक्टेड आउटपुट न हो और अपने बाहरी मॉनिटर को अनदेखा कर दे। ईजी:

If (xrandr -q | grep 'HDMI1 connected') != NULL (HDMI1 is connected )
then xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1
else xrandr --output LVDS1 --mode 1366x768 (or do nothing - because the resolution of the laptop screen is correct when no external monitor is connected)

अग्रिम में धन्यवाद।

जवाबों:


18

नोट: मैंने भी यहाँ इस उत्तर को पोस्ट किया है

मुझे एक बहुत ही सरल वर्कअराउंड मिला जो मेरे लिए 13.04 चलाने के लिए पूरी तरह से काम करता है। 24 "बाहरी स्क्रीन के साथ एक लैपटॉप पर जो स्थायी रूप से जुड़ा नहीं है।

मैं बस यहीं से नकल करूंगा

  1. लॉग इन करें
  2. अपने मॉनिटर को कॉन्फ़िगर करने के लिए xrandr या डिस्प्ले कंट्रोल यूटिलिटी का उपयोग करें कि आप उन्हें लॉगिन स्क्रीन में कैसे कॉन्फ़िगर करना चाहते हैं
  3. sudo cp ~/.config/monitors.xml /var/lib/lightdm/.config/

चूंकि मेरे पास पहले से ही मेरे मॉनिटर ठीक से कॉन्फ़िगर किए गए थे इसलिए मुझे केवल चरण 3 करना था।


9

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

 (Parse the output of `XRAND -q` command, 
identify the connected devices, 
grab their first/maximum resolutions 
and use `XRANDR --output` to display them). 

इसलिए अगर किसी के पास एक बेहतर समाधान या अधिक सामान्य स्क्रिप्ट है, तो वह आदमी है।

स्क्रिप्ट:

    #!/bin/bash
    # V-1.0 by Hanynowsky - April 2012. 
    # I am a very basic script that works around bug 874241 repprted in launchpad.

    XCOM0=`xrandr -q | grep 'HDMI1 connected'`
    XCOM1=`xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1`
    XCOM2=`xrandr --output LVDS1 --mode 1366x768`
    # if the external monitor is connected, then we tell XRANDR to set up an extended desktop
    if [ -n "$XCOM0" ] || [ ! "$XCOM0" = "" ]; then echo $XCOM1
    # if the external monitor is disconnected, then we tell XRANDR to output only to the laptop screen
    else echo $XCOM2
    fi
    exit 0;

2

बहुत धन्यवाद Hanynowsky! आपके जवाब को खोजने से मुझे एक टन का काम मिला (हाल ही में नवीनीकृत 12.04)। हालांकि मेरे मामले में यह पूर्ण समाधान प्रदान नहीं करता था इसलिए मैं जो कुछ भी सीखा था उसे जोड़ना चाहूंगा। मेरा सेटअप एक सैमसंग S22A300B था, जिसमें वायो VGN-CR120E के VGA पोर्ट में निर्मित 1280x800 डिस्प्ले और एक मोबाइल GM965 / GL960 इंटीग्रेटेड ग्राफिक्स कंट्रोलर था।

संक्षेप में मुझे जो मिला वह था:

  • प्रदर्शन प्रणाली सेटिंग के उपयोग से मैं बाहरी सैमसंग डिस्प्ले पर अधिकतम रिज़ॉल्यूशन 1024x768 सेट कर सकता था।
  • यह स्पष्ट रूप से कारण था क्योंकि मेरा वीजीए नियंत्रक ईडीआईडी ​​का समर्थन नहीं करता है। किसी कारण से Windows Vista और Windows 7 (एक अलग लैपटॉप पर) इस स्थिति को संभाल सकते हैं और प्रस्तावों की एक पूरी श्रृंखला प्रदान कर सकते हैं।

इस सीमित अधिकतम रिज़ॉल्यूशन को प्राप्त करने के लिए मैंने निम्नलिखित कार्य किए:

  • Xrandr को --newmode और --addmode के साथ जोड़ने के लिए अपनी स्क्रिप्ट में लाइनें जोड़ें
  • 1920x1080 के लिए --newmode मॉडल को उत्पन्न करने के लिए cvt की कोशिश की, लेकिन दुर्भाग्य से यह मेरे सेटअप के लिए काम नहीं किया।
  • एक एचडीएमआई पोर्ट के साथ एक लैपटॉप उधार लिया, इसे सैमसंग के साथ प्लग किया, और 1920x1080 56.2 kHz के लिए modline को /var/log/Xorg.0.log से बाहर निकाल दिया।
  • मेरे सेटअप के लिए अपनी स्क्रिप्ट को संशोधित करने के साथ-साथ उस मोडलाइन को प्लग इन करें (जैसे HDMI1-> VGA1, सही लैपटॉप रिज़ॉल्यूशन, आदि)

इस ALMOST ने काम किया, लेकिन लॉगऑन के बाद बाहरी मॉनिटर 1920x1080 से वापस 1024x768 पर रीसेट हो गया। यह पता चला कि यह एक निरंतर उपयोगकर्ता सेटिंग थी और आसानी से डिस्प्ले ... सिस्टम सेटिंग (गियर मेनू से) के लिए अब उपलब्ध 1920x1080 का उपयोग करके तय की गई थी। अब जब मैं बाहरी मॉनिटर से जुड़ा हुआ हूं तो सब कुछ अपेक्षित रूप से काम करता है।

एक अतिरिक्त गड़बड़: यदि यह स्क्रिप्ट दो बार चलती है (उदाहरण के लिए टर्मिनल से) xrandr --newmode लाइन को "BadName (रंग या फ़ॉन्ट मौजूद नहीं है)" त्रुटि मिलेगी, लेकिन /programming/ 851704 / xrandr-error-badname-name-color-or-font-does-not-मौजूद इस बारे में बताया और यह सौम्य लगता है। इसके अलावा जब स्क्रिप्ट को lightdm.conf प्रति Hanynowsky के निर्देशों के अनुसार हुक किया जाता है तो समस्या नहीं होनी चाहिए। मैन्युअल रूप से चलाएँ।

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

#!/bin/bash
# Modified for Vaio with 1920x1080 external on VGA
XCOM0=`xrandr -q | grep 'VGA1 connected'`
XCOM1="xrandr --output VGA1 --primary --mode 1920x1080 --output LVDS1 --mode 1280x800 --left-of VGA1"
XCOM2="xrandr --output LVDS1 --mode 1280x800"
NEWMODE="xrandr --newmode "1920x1080" 148.50  1920 2448 2492 2640  1080 1084 1089 1125 +hsync +vsync"
ADDMODE="xrandr --addmode VGA1 1920x1080"

# Always add this mode in case we need it (better would be to test first)
eval $NEWMODE
eval $ADDMODE

if [ -n "$XCOM0" ] || [ ! "$XCOM0" = "" ];
then
        # if the external monitor is connected, then we tell XRANDR to set up an extended desktop
        eval $XCOM1
else
        # if the external monitor is disconnected, then we tell XRANDR to output only to the laptop screen
        eval $XCOM2
fi
exit 0;

ध्यान दें: मुझे यकीन नहीं है कि यदि आवश्यक है (बनाम मूल में प्रतिध्वनि)। मैंने इसे प्रदर्शित करने से पहले यह पाया कि मेरे डिस्प्ले ... सेटिंग्स बाहरी डिस्प्ले को कम रिज़ॉल्यूशन पर रीसेट कर रहे थे।


आपका स्वागत है आपका स्वागत है वेल्टर विटेल और आपके बहुमूल्य योगदान के लिए धन्यवाद। एक बार मेरे पास समय हो तो मैं एक और सामान्य स्क्रिप्ट का पता लगाने की कोशिश करूँगा; लेकिन मुझे संदेह है कि XRANDR का उपयोग करके एक गैर EDID मॉनिटर के लिए सही मोडलाइन निकालना संभव होगा। वैसे भी, चलो देखते हैं।
३.३६ बजे ह्नीव्स्की

1

मैंने पाया कि रिज़ॉल्यूशन को स्पष्ट रूप से बताने के लिए --mode का उपयोग करने के बजाय, --auto आपके लिए सबसे अच्छा रिज़ॉल्यूशन (सबसे बड़ा जो मैं मानता हूं) चुनूंगा।

#!/bin/bash

XCOM0=`xrandr -q | grep 'VGA1 connected'`
XCOM1=`xrandr --output LVDS1 --primary --auto --output VGA1 --auto --right-of LVDS1`
XCOM2=`xrandr --output LVDS1 --primary --auto`
# if the external monitor is connected, then we tell XRANDR to set up an extended desktop
if [ -n "$XCOM0" ] || [ ! "$XCOM0" = "" ]; then echo $XCOM1
# if the external monitor is disconnected, then we tell XRANDR to output only to the laptop screen
else echo $XCOM2
fi

exit 0;

1
हची आपकी स्क्रिप्ट बहुत अच्छी है! इस बग से प्रभावित किसी को भी बस इस स्क्रिप्ट में अपने डिस्प्ले का सही रिज़ॉल्यूशन डालना होगा और लाइटमैड को रीस्टार्ट करना होगा: सडू रिस्टार्ट लाइटमैड दैट ऑल! सब कुछ महान काम करता है! : मैं यहाँ इस समस्या के बारे में मेरे प्रश्न पोस्ट किया है askubuntu.com/questions/181112/...
conscientist

0

यदि आप LightDM के GTK अभिवादन का उपयोग कर रहे हैं तो आप xrandr -qअपने मॉनिटर के नाम खोजने के लिए दौड़ सकते हैं /etc/lightdm/lightdm-gtk-greeterऔर फिर active-monitorउस फ़ाइल के अंदर टिप्पणियों में वर्णित संपत्ति को संपादित और सेट कर सकते हैं । यह गुण #cursorमॉनिटर के लिए कई, आदेशित मान ले सकता है जो वर्तमान में माउस कर्सर दिखाता है।

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