自宅のPCはFreeBSDでデュアルモニタで利用している.Xでデュアルモニタを使う方法はネットで調べるといろいろ出てくる.
nvidiaのドライバを使う方法とかもあるがグラフィックチップ依存になるのでなるべくならXの設定のみでなんとかしたい.
xorg.confにはXineramaというオプションもあってこれだとディスプレイ2台を1枚の巨大なスクリーンとして使えるのだがこれはウィンドウマネージャが対応しているかどうかによっているらしく,そしてほとんどのウィンドウマネージャは対応していないようだ.
なのでXinerama未指定で普通にスクリーン2枚として使っているのだが,でもこれだとちょっと使いにくい部分があるので設定を改良してみたのでメモがてらブログに書いておく.
まずXineramaオプション無しでスクリーン2枚で使うような設定だと,マウスカーソルが画面端にいったときに(xorg.confでScreenの設定をLeftOfにしているなら,マウスカーソルが画面左端にいったときに)スクリーンが切り替わる.しかしこれがAfterstepの仮想画面と相性が悪くて,ゆっくり移動するとAfterstepの仮想画面が切り替わるが速く移動するとスクリーンが切り替わる,みたいな動作になってしまってとてもうっとうしい.
ということで,マウス移動ではスクリーンは切り替わらない(Afterstepの仮想画面のみ切り替わる)ようにして,さらに右Altキーでスクリーンが切り替わるように設定する.
まずマウス移動でスクリーンが切り替わらないようにする設定.xorg.confに以下の修正を入れてスクリーンの位置を離すことで,スクリーンを隣接させないようにする.もしかしたら何かオプションとかでできるのかもしれないが調べてもみつからなかったので,(あまりきれいなやりかたじゃないが)とりあえずこれで対応しておく.
さらにxbindkeysとxdotoolをpackagesでインストールする.xdotoolはマウス移動などのイベントを発生させることができるツールで,実はxautomationというツール(に付属するxteというツール)でも同等のことができるが,xdotoolにはスクリーンを切替えたりスクリーン番号を取得したりする機能があるので,こちらを利用する.
で,以下のようなスクリプトを chgscreen.sh として作成する.実行するとスクリーンを切替えることができる.
スクリプト実行してスクリーンが切り替わることを確認する.さらに以下のような内容で.xbindkeysrcを作成する.
xbindkeysを起動し,右AltもしくはCtrl+Enterでスクリーンが切り替わることを確認する.
xbindkeysを起動するように.xinitrcに追加.これで完了.
nvidiaのドライバを使う方法とかもあるがグラフィックチップ依存になるのでなるべくならXの設定のみでなんとかしたい.
xorg.confにはXineramaというオプションもあってこれだとディスプレイ2台を1枚の巨大なスクリーンとして使えるのだがこれはウィンドウマネージャが対応しているかどうかによっているらしく,そしてほとんどのウィンドウマネージャは対応していないようだ.
なのでXinerama未指定で普通にスクリーン2枚として使っているのだが,でもこれだとちょっと使いにくい部分があるので設定を改良してみたのでメモがてらブログに書いておく.
まずXineramaオプション無しでスクリーン2枚で使うような設定だと,マウスカーソルが画面端にいったときに(xorg.confでScreenの設定をLeftOfにしているなら,マウスカーソルが画面左端にいったときに)スクリーンが切り替わる.しかしこれがAfterstepの仮想画面と相性が悪くて,ゆっくり移動するとAfterstepの仮想画面が切り替わるが速く移動するとスクリーンが切り替わる,みたいな動作になってしまってとてもうっとうしい.
ということで,マウス移動ではスクリーンは切り替わらない(Afterstepの仮想画面のみ切り替わる)ようにして,さらに右Altキーでスクリーンが切り替わるように設定する.
まずマウス移動でスクリーンが切り替わらないようにする設定.xorg.confに以下の修正を入れてスクリーンの位置を離すことで,スクリーンを隣接させないようにする.もしかしたら何かオプションとかでできるのかもしれないが調べてもみつからなかったので,(あまりきれいなやりかたじゃないが)とりあえずこれで対応しておく.
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
- Screen 1 "Screen1" LeftOf "Screen0"
+# Screen 1 "Screen1" LeftOf "Screen0"
+ Screen 1 "Screen1" Relative "Screen0" 10000 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
Option "AutoAddDevices" "false"
さらにxbindkeysとxdotoolをpackagesでインストールする.xdotoolはマウス移動などのイベントを発生させることができるツールで,実はxautomationというツール(に付属するxteというツール)でも同等のことができるが,xdotoolにはスクリーンを切替えたりスクリーン番号を取得したりする機能があるので,こちらを利用する.
で,以下のようなスクリプトを chgscreen.sh として作成する.実行するとスクリーンを切替えることができる.
#!/bin/sh
OLDSCREEN=`xdotool getmouselocation | cut -d " " -f 3 | cut -d : -f 2`
XPOSITION=`xdotool getmouselocation | cut -d " " -f 1 | cut -d : -f 2`
YPOSITION=`xdotool getmouselocation | cut -d " " -f 2 | cut -d : -f 2`
NEWSCREEN=`echo "1 - $OLDSCREEN" | bc`
#echo $OLDSCREEN
#echo $XPOSITION
#echo $YPOSITION
#echo $NEWSCREEN
xdotool mousemove --screen $NEWSCREEN $XPOSITION $YPOSITION
スクリプト実行してスクリーンが切り替わることを確認する.さらに以下のような内容で.xbindkeysrcを作成する.
"/home/hiroaki/chgscreen.sh"
Alt_R
"/home/hiroaki/chgscreen.sh"
Control+Return
xbindkeysを起動し,右AltもしくはCtrl+Enterでスクリーンが切り替わることを確認する.
xbindkeysを起動するように.xinitrcに追加.これで完了.





