web-dev-qa-db-ja.com

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

私はバグの影響を受けます: https://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241 それ以外の場合、私の場合はラップトップを2台目に接続しています高解像度のモニター、LIGHTDM、ログイン段階で、mirrors私の場合、両方の画面でディスプレイを表示し、デスクトップに拡張するのではなく、共通の解像度(1024X768)を割り当てます(12.04のMultiple Monitors UX仕様書に記載されているように、ロゴだけでグリーターとセカンダリのプライマリ画面)。

ここに私の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)

各モニターに適切な解像度を設定してデスクトップを拡張するために、lightdmにいくつかのxrandrコマンドを実行させようとしたため、/ 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は接続されていないモニターへの出力を試みるため、正常です。

ここでのquestionは、外部モニターが接続されていないときに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)

前もって感謝します。

17
Hanynowsky

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

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

だから誰かがより良い解決策やより一般的なスクリプトを持っているなら、彼はその人です。

SCRIPT:

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

注:この回答も掲載しました ここ

13.04を実行している私にとって完璧に機能する非常に簡単な回避策を見つけました。常時接続されていない24インチの外部スクリーンを備えたラップトップで。

here からコピーします

  1. ログインする
  2. xrandrまたはディスプレイ制御ユーティリティを使用して、ログイン画面でモニターを構成する方法をモニターを構成します。
  3. Sudo cp ~/.config/monitors.xml /var/lib/lightdm/.config/

モニターが既に適切に構成されているため、手順3を実行する必要がありました。

18
Tobold

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

1つの追加の不具合:このスクリプトが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)。ディスプレイ...設定が外部ディスプレイを低解像度にリセットすることを発見する前にこれを入れました。

2
Walter Wittel

--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
hachi

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

0
Dzamo Norton