xrandr を起動時に有効にする

はじめに

LinuxなどのX-windowでデュアル・ディスプレイを使用したい時にはxrandrが便利です。今ま では、ログインした度に、xrandrを実行してデュアル化していました。しかし、毎回ログインする度に、 xrandrを実行するのは面倒です。そこで、ログイン時にxrandrを用いたデュアル・ディスプイレの自動 化をしました。その時のメモを以下に示します。やっている内容は、基本的に ThinkWikiの “Xorg RandR 1.2”を参考にしています。xrandrの詳細については、そちらを御参照下さい。

xrandrを使用するには、まず、xorg.confを適宜修正することが必要です。以前のX-Window Systemは xinerama という仕組みがありましたが、それを使う記述があるとxrandrが上手く動かないようです。

xrandrの自動化は、Xsession を開始する時に実行するスクリプトに、xrandrを実行する部分を仕込む ことで実現します。

以下では、前提となるハードウェア環境を示し、次にxorg.confの修正、最後にXsession スクリプトの 内容を示します。

ハードウェア環境

当方のハードウェア環境は、

  • Graphic board: ATI Radeon HD 4200 (ASUSの M4A785TD Motherboard にオンボード)
  • モニター: 左側 Iiyama Prolite E1706E (1280×1024) DVI入力
  • モニター: 右側 Iiyama Prolite E2205WS (1680×1050) VGA入力
です。

xorg.conf

xrandrを用いる時は、 ThinkWikiの記事 にもあるように、少し注意が必要です。注意する点は

  • “dual Device/Screen/Monitor section”の削除
  • 残った “Device section” から “MonitorLayout option” と “Screen”のある行 の削除
  • “ServerLayout section”から “dual Screen”の行を削除
  • 残った”ServerLayout section”から”RightOf/LeftOf”の指定行を削除
  • 広い仮想スクリーンを準備するために、SubSection “Display”の箇所に “Virtual 3072 1280” の 行を加える

となっています。

実際に私が用いている xorg.confを以下に示します(コメント行は削除してあります。)

 Section "Monitor"
     Identifier	"Monitor1"
 EndSection

 Section "Device"
     Identifier	"Video Card"
 EndSection

 Section "Screen"
     Identifier	"Screen"
     Device	"Video Card"
     Monitor	"Monitor"
     SubSection "Display"
	  Virtual 3072 1280
     EndSubSection
 EndSection

これだけで良いようです。

xrandrの自動化

まず、xrandrのコマンドを確認します。私のハードウェア環境では、

   xrandr --output DVI-0 --mode 1280x1024 --output VGA-0 --mode 1650x1050 --right-of DVI-0

で、望んでいる配置になります。

ThinkWikiの xrandr 1.2の記事 に ある、xrandrを自動化するスクリプト例では、X-windowの出力を internalとexternalとに分けていま す。internalが デュアル・ディスプレイにしない時でも出力されるメインのディスプレイで、externalは、デュ アル・ディスプレイにする時にだけ出力される、言ってみれば拡張する時のディスプイレの事です。こうしておくと後々ハードウェ アを変更した時にも設定の変更が分かりやすい、かも知れません。

そこで、私のハードウェア環境に対しては、internalが 左側 E1706S DVI-0、externalを右側 E2205WS VGA-0 としました。また、各々のmodeは別々に指定するので、新しい変数、INTERNAL_OUTPUT_MODEと EXTERNAL_OUTPUT_MODEを設けています(ThinkWikiでは –autoとしています)。このようにしたスクリプ トは次のようになりました:

EXTERNAL_OUTPUT="VGA-0"
EXTERNAL_OUTPUT_MODE="1680x1050"
INTERNAL_OUTPUT="DVI-0"
INTERNAL_OUTPUT_MODE="1280x1024"
EXTERNAL_LOCATION="right"
 
case "$EXTERNAL_LOCATION" in
       left|LEFT)
               EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
               ;;
       right|RIGHT)
               EXTERNAL_LOCATION="--right-of $INTERNAL_OUTPUT"
               ;;
       top|TOP|above|ABOVE)
               EXTERNAL_LOCATION="--above $INTERNAL_OUTPUT"
               ;;
       bottom|BOTTOM|below|BELOW)
               EXTERNAL_LOCATION="--below $INTERNAL_OUTPUT"
               ;;
       *)
               EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
               ;;
esac
 
xrandr |grep $EXTERNAL_OUTPUT | grep " connected "
if [ $? -eq 0 ]; then
    xrandr --output $INTERNAL_OUTPUT --mode $INTERNAL_OUTPUT_MODE --output $EXTERNAL_OUTPUT --mode $EXTERNAL_OUTPUT_MODE $EXTERNAL_LOCATION
else
    xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --off
fi

これを /etc/X11/Xsession.d/45custom_xrandr-settings として保存しました。

まとめ

xrandrをログイン時、あるいはX-Windowのセッション時に自動的に有効にしました。これで、快適な X-Windowの生活を送ることが出来ます。ちなみに、xrandrにはGUIツールがいくつか準備されています。 私は grandr を愛用してました。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください