sachaos.md
----------

ArchLinuxで自動でdisplayの接続を認識し調整する

## はじめに

デュアルディスプレイにする際、毎回コマンドを叩いて、外すときもまたコマンドを叩いていた。こうしないとデュアルディスプレイにしたいのに、一画面にだけ表示されているままだったり、ディスプレイが一つなのに、複数のディスプレイがある状態になってしまう。

$ # ディスプレイをつけたとき
$ xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1
$ # ディスプレイを外したとき
$ xrandr --output VGA1 --off

毎回コマンドを叩くのはこれはこれでテンションが上がるのだが、やはりイケていないし、いい加減面倒になってきた。自動でディスプレイの接続状況を確認して調整するスクリプトを書いたのでメモ。

## 環境

  • ArchLinux (kernel 4.7.4)
  • awesome v3.5.9
  • xrandr v1.5.0

## script

以下のスクリプトは https://wiki.archlinuxjp.org/index.php/Xrandr から引用

#!/bin/bash

IN="LVDS1"
EXT="VGA1"

if (xrandr | grep "$EXT disconnected"); then
    xrandr --output $IN --auto --output $EXT --off
else
    xrandr --output $IN --auto --primary --output $EXT --auto --right-of $IN
fi

このシェルスクリプトを実行すると、もし外部ディスプレイが存在すれば、それに接続し、もし、存在しなければ、単一ディスプレイの表示となる。

## awesomeから定期実行させる

awesomeのタイマー機能を使用して、定期的に実行させるようにした。

cronや、systemd のタイマーを使用しても良いかなぁと思ったが、どのタイミングで止めるべきかなど、管理もめんどそうだし、どうせawesomeを使っているときくらいしかマルチディスプレイを欲しないのでこれで良い。

スマートなやり方があったら教えてください。

一秒毎に上記スクリプトが実行されるようにする。

~/.config/awesome/rc.lua に以下を追記

displayChangeTimer = timer({ timeout = 1 })
displayChangeTimer:connect_signal(
  "timeout",
  function ()
    awful.util.spawn_with_shell("~/scripts/display.sh")
  end
)
displayChangeTimer:start()

これで一秒ごとにディスプレイの接続を確認し、ディスプレイの調整を行ってくれる。