複数のモニターにLightDMの正しい解像度を強制する方法は?


17

:私はバグの影響を受けていますhttps://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241 私のようなあなたは、より高い解像度のセカンドモニタに接続されたラップトップを持っている場合は、それ以外の場合はLIGHTDMでのログイン段階、ミラーの代わりにマルチモニタUX仕様書で述べたように、単にロゴとグリーターとセカンダリでデスクトップ(プライマリ画面を拡張する私の場合は、それらに画面と割り当ての両方で表示され、共通の解像度(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 また、Unity greeterの ログイン画面が正しくなりました。それぞれの正しい解像度の画面で、マウスを画面に移動すると、ログインボックスとパネルでフォーカスが合いますが、フォーカスのない画面にはUbuntuロゴが表示されます(MM UX仕様書で指定されているとおりです)。素晴らしい!

この回避策は、外部モニターがラップトップに接続されている限り、うまく機能します。接続されていない状況で、ログイン段階で、低グラフィックモードエラーが表示されます(低グラフィックモード、画面、入力デバイスで実行しています...検出されませんでした)。通常、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

私は私の質問に答える以下のこの小さな基本的なスクリプトを管理しました。これで、外部モニターが接続されているかどうかにかかわらず、Lightdmはグリーター段階で適切な解像度を使用します。それでも、この同じスクリプトは、ユーザーがラップトップおよびモニター画面の解像度を手動で指定する必要がないように、汎用になるように変更する必要があります。

 (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)。しかし、私の場合、完全なソリューションを提供しなかったため、学んだことを追加したいと思います。私のセットアップは、組み込みの1280x800ディスプレイとモバイルGM965 / GL960統合グラフィックスコントローラーを備えたVaio VGN-CR120EのVGAポートに接続されたSamsung S22A300Bでした。

手短に私が見つけたのは:

  • ディスプレイシステム設定を使用して外部Samsungディスプレイで設定できる最大解像度は1024x768でした。
  • これは、私のVGAコントローラーがEDIDをサポートしていないために発生したようです。何らかの理由で、Windows VistaとWindows 7(別のラップトップ上)の両方がこの状況を処理し、あらゆる解像度を提供できます。

この制限された最大解像度を回避するには、次を実行しました。

  • --newmodeおよび--addmodeでxrandrを呼び出すためのスクリプトに行を追加しました
  • cvtで1920x1080の--newmodeモードラインを生成しようとしましたが、残念ながら私の設定では機能しませんでした。
  • HDMIポートを備えたラップトップを借りて、Samsungをプラグインして起動し、/ var / log / Xorg.0.logから1920x1080 56.2 kHzのmodlineを取得しました
  • そのmodlineをプラグインし、セットアップ用にスクリプトを変更しました(例:HDMI1-> VGA1、ラップトップの正しい解像度など)。

このALMOSTは機能しましたが、ログオン後、外部モニターは1920x1080から1024x768にリセットされました。これは永続的なユーザー設定であり、ディスプレイ...システム設定(ギアメニューから)を使用して現在利用可能な1920x1080に簡単に修正できることが判明しました。外部モニターを接続した状態で起動すると、すべてが正常に機能するようになりました。

追加の不具合:このスクリプトが2回実行されると(たとえば端末から)、xrandr --newmode行に「BadName(名前の付いた色またはフォントが存在しません)」エラーが表示されますが、https: //stackoverflow.com/questions/ 851704 / xrandr-errors-badname-named-color-or-font-does-not-existはこれを説明していて、良性のようです。また、Hanynowskyの指示と手動での実行によってスクリプトがlightdm.confに接続されている場合も問題になりません。

他の人の助けになることを期待して、上記に適応した変更(EDID機能のないVGA)を提供しています。前述の回答で述べたように、これを独自のセットアップに適合させる必要があります。正しいmodlineを取得するための良いアドバイスはありませんが、他の誰かがチップを入れてください。

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

注:evalが必要かどうかはわかりません(vs. echo in the original)。ディスプレイ...設定が外部ディスプレイを低解像度にリセットすることを発見する前にこれを入れました。


@Walter Wittelを歓迎します。貴重な貢献に感謝します。時間があれば、可能であれば、より一般的なスクリプトを見つけようとします。しかし、XRANDRを使用して非EDIDモニターの正しいmodlineを抽出することは可能だとは思いません。とにかく、見てみましょう。
ハニノフスキー

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
あなたのスクリプトがうまく動作するように!このバグの影響を受ける人は誰でも、このスクリプトでディスプレイの正しい解像度を設定し、lightdmを再起動する必要があります。sudorestart lightdm thats all!すべてがうまくいきます!私はここで、この問題についての私の質問を掲載しました:askubuntu.com/questions/181112/...
conscientist

0

LightDMのGTK greeterを使用している場合は、実行xrandr -qしてモニターの名前を検索し、そのファイル内のコメントの説明に従って/etc/lightdm/lightdm-gtk-greeterプロパティactive-monitorを編集および設定できます。このプロパティは#cursor、現在マウスカーソルを表示しているモニターを含む、複数の順序付けられた値を取ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.