05 October 2013

(Ubuntu) 複数ディスプレイでログイン画面がサブディスプレイに表示される

複数のディスプレイを接続しているときに、ログイン画面が意図しないディスプレイに表示される時がある。ここで説明するのは、メインディスプレイ以外を無効化する方法。

CentOSの場合は、こちらの記事 → (CentOS) 複数ディスプレイでログイン画面がサブディスプレイに表示される

■ 検証環境
・Ubuntu 12.04
・ディスプレイはHDMIとVGAに接続(計2台)。HDMIがメインディスプレイ

■ ログイン画面の例

20131005-greeter-main.jpg
メインディスプレイ (Primary Monitor)

20131005-greeter-sub.jpg
サブディスプレイ (Secondary Monitor)

この表示が逆になり、メインディスプレイに“Ubuntu ロゴ”が表示されるのみで、なんのことやら…

■ /etc/lightdm/lightdm.conf から呼び出すスクリプトでX設定をいじる方法

Google検索ではこの方法が一番たくさん引っかかってきたが、結果としてうまくいかなかった。方法は次のようなものだ。

まず、接続されているディスプレイのXでの呼称を調べる。

$ xrandr
 
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
VGA1 connected (normal left inverted right x axis y axis)
   1920x1080      60.0 +
   1680x1050      60.0  
… 省略 …
   720x400        70.1  
HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 476mm x 268mm
   1920x1080      60.0*+
   1680x1050      60.0  
… 省略 …
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)

VGA1 と HDMI1 という呼称で認識されているようだ。それぞれ、次のコマンドで有効・無効とプライマリ設定することが出来る。(ユーザ権限でも可能)

VGA1の無効化

$ xrandr --output VGA1 --off

VGA1を有効化して、ミラー表示

$ xrandr --output VGA1 --auto --same-as HDMI1

VGA1を有効化して、HDMI1の右側に配置

$ xrandr --output VGA1 --right-of HDMI1

HDMIをプライマリディスプレイに設定

$ xrandr --output HDMI1 --primary

一通りコントロールできることが確認できたら、lightdm用にスクリプトファイルを作成する

/etc/lightdm/vga1_disable.sh
#!/usr/bash
xrandr --output VGA1 --off

このスクリプトを、rootに所有権を移し、実行属性を立てる

$ sudo chown root:root /etc/lightdm/vga1_disable.sh
$ sudo chmod 755 /etc/lightdm/vga1_disable.sh

そして、lightdm.confに追加する

/etc/lightdm/lightdm.conf
[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
greeter-setup-script=/etc/lightdm/vga1_disable.sh
#display-setup-script=/etc/lightdm/vga1_disable.sh
#session-setup-script=/etc/lightdm/vga1_disable.sh

一応、全てのセットアップスクリプトで試してみた。スクリプトが実行されているかどうかは、/var/log/lightdm/lightdm.log を確認した。 結果は、全くうまくいかなかった。VGA1は無効化できない。

■ monitors.xmlをlightdmの設定ディレクトリに放り込む

最終的に、この方法が成功した。ログオンユーザのホームディレクトリの下にある .config ディレクトリに存在する monitors.xml を /var/lib/lightdm/.config にコピーすればよい。

コピー前に、そのユーザで「シングルモニタ」設定(VGA1無効)としてmonitors.xmlを更新しておくこと。

$ sudo cp /home/user/.config/monitors.xml /var/lib/lightdm/.config/

なお、monitors.xmlの内容は次のようなものだ

monitors.xml
<monitors version="1">
  <configuration>
      <clone>no</clone>
      <output name="VGA1">
          <vendor>IVM</vendor>
          <product>0x560c</product>
          <serial>0x00001111</serial>
      </output>
      <output name="HDMI1">
          <vendor>IOD</vendor>
          <product>0x1685</product>
          <serial>0x01010101</serial>
          <width>1920</width>
          <height>1080</height>
          <rate>60</rate>
          <x>0</x>
          <y>0</y>
          <rotation>normal</rotation>
          <reflect_x>no</reflect_x>
          <reflect_y>no</reflect_y>
          <primary>yes</primary>
      </output>
      <output name="DP1">
      </output>
  </configuration>
</monitors>