複数のディスプレイを接続しているときに、ログイン画面が意図しないディスプレイに表示される時がある。ここで説明するのは、メインディスプレイ以外を無効化する方法。
CentOSの場合は、こちらの記事 → (CentOS) 複数ディスプレイでログイン画面がサブディスプレイに表示される
■ 検証環境
・Ubuntu 12.04
・ディスプレイはHDMIとVGAに接続(計2台)。HDMIがメインディスプレイ
■ ログイン画面の例
メインディスプレイ (Primary Monitor)
サブディスプレイ (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用にスクリプトファイルを作成する
#!/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に追加する
[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 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>