読者です 読者をやめる 読者になる 読者になる

拾い物のコンパス

まともに書いたメモ

OSX(mac)にXmonadをインストールする方法

普段はLinuxXmonadを入れて作業をしているが,短期間だけOSX(mac)を使うこととなった(知っている企業や大学ってやたらとLet's NoteとMacbookが好き.ThinkPadも選択肢に入れて欲しい).普段通りに作業するためにOSXXmonadを入れる方法を模索し,動かすところまではいけた.しかしLinuxほどの快適さはないため,OSX(mac)ではXmonadを使わないほうが良い.代わりにXmonadを意識して作られたAmethystがとりあえずおすすめ.インストールの流れをメモ代わりに書き残す.

環境

$ uname -a
後で入力する(確かDarwinのx64)

OSXXmonadを動作させる仕組み

XmonadX11で動作するよう実装されている.どれくらい依存しているかというと,ソースコードのMain部にガッツリX11関連の関数を使っていて置き換えることが面倒くさそうな位依存している.
このためOSXで動作させるためのアプローチとしてはX11OSX版であるXQuartzをインストールし,このX11上で動かすデスクトップマネージャ(DM)にXmonadを選択し,起動させる流れとなる.

インストール方法

brewのインストール

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

XQuartzのインストール

https://www.xquartz.orgからXQuartz-2.7.9.dmgをダウンロード,インストール(ダブルクリックとContinueを押し続けるだけ).
インストールに成功すると,/Applications/Utilities/XQuartz.app/opt/X11/bin/quartz-wmなどができているはず.デスクトップの検索マークからXQuartzを探し,起動するとDock(デフォルトだと画面下にあるショートカットキーが並んでいるところ)に大文字のXが中心のマークが現れるはず.
XQuartzを選択した状態でデスクトップの左上のXQuartz -> Preferencesで各種設定を変更する.WinodowタブでFull Screen Modeを設定する以外は特にいじらなかった.
~/.xinitrcがあるとエラーが出ることもあるから,あるならrenameしておくほうが良い.

Haskellをインストールする

XmonadをインストールするためにHaskellコンパイラなどをインストールする.She is Haskell.って笑うやつは表に出ろ.すごいH本を朗読してやる.
https://www.haskell.org/platform/mac.htmlからHaskellインストーラを落とす.ダブルクリックしてインストール.
インストールが終わったら,端末から
$ cabal update
でパッケージリストを最新に更新する.

xmonadのインストール

いよいよXmonadをインストールする.
$ cabal install xmonad
でできるはずだが,今回の環境ではXssライブラリがないとエラーが出た.原因は先ほどインストールしたXQuartzが持つX11のヘッダやライブラリ関係がパスに含まれていなことだった.よって今回のコマンドのときだけパスを追加してやれば良い.
$ LIBRARY_PATH=/opt/X11/lib:$LIBRARY_PATH cabal install xmonad
これでXmonadがインストールできるはず.これでも駄目なら,
$ LIBRARY_PATH=/opt/X11/lib:$LIBRARY_PATh cabal install X11
も試して,デバッグしていく.頑張れ.

Xmonad関連インストール

エラーが出るのを防ぐためにX11関連のヘッダを検索パスに含めておく.今回はシンボリックリンクを張る方法を選んだ.

$ ln -s /opt/X11/include/X11 /usr/local/include/X11
$ LIBRARY_PATH=/opt/X11/lib:$LIBRARY_PATH cabal install xmonad-contrib xmobar

XQuarzの設定作成

X11(XQuartz)起動時に使われるWMを設定する.設定は環境変数USERWMに使いたいWMのバイナリパスを入れてやる.

$ mkdir $HOME/.xinitrc.d/
$ vim $HOME/.xinitrc.d/90-xmonad.sh
  #!/bin/sh
  USERWM=$HOME/Library/Haskell/bin/xmonad # xmonadのバイナリが入っているところを指すようにする

xmonadのパスがわからないときは
$ find $HOME -name xmonad -type f 2>/dev/null
で検索する.
あとはX11が起動時に実行されるようにスクリプトに実行権限を付与する.
$ chmod +x ~/.xinitrc.d/90-xmonad.sh
X11で起動するWMをデフォルトのquartz-wmに戻したければ
$ chmod -x ~/.xinitrc.d/90-xmonad.sh
で実行権限をなくせば良い. 以上で基本的な作業は終了.
後は各自xmonad.hs.xmobarrcなどを調整する.

起動

XQuartzが起動した状態で左上のXQuartzタブを押して,Toggle Full Screenを押す.全画面がX11になり,Xmonadが使えるようになる(全画面にしなくても使えるが,全画面のほうがおすすめ).

戻り方

Command+Option+a

問題点

ワークスペースの切り替え,複数の端末操作は通常通り行えるが,/Applications以下のアプリ(ブラウザやメーラ)をXmonad上で実行する方法がわからないといった致命的な問題にぶち当たり,解決策を思いつかなかった.少し使ってみての問題としては以下が挙げられる.

  • OSXではXmonadの相棒urxvtclearコマンドが動かない
  • Chromeなどの/Applications以下にインストールされているアプリを起動させるとXmonadからホストのWMに戻り,そちらで起動してしまう
  • デフォルトで起動するxtermはマルチバイト文字読めない・入力できない
  • xmonad.hs.xmobarrcOSX用に調整しないといけない
  • デバッグしたくない

問題が山積みでここまでしてXmonadに固執する必要もない気がしてきたから,Amethystも試してみた.そしたら比較的快適だったから今回はこっちを使うことにした.

Amethystのインストール

$ brew cask install amethyst
とても簡単.

Amethyst設定

System Preferencesを立ち上げ,Security & Privacy -> Accessibility,左下のロックボタンを押してロックを解除し,'+'を押す.Applications -> Amethystを選択し,権限を与える.詳しくはAmethystのgithubを見るのがわかりやすい.

Amethystの起動

デスクトップの検索からAmethystを検索して起動するだけ. 提供する機能はウィンドウ同士の配置を自動でXmonad風に整形,ウィンドウの選択・入れ替えといったシンプルな部分のみ.
ワークスペースの切り替えはMission Controlによるものになるが,どうにも無駄な動作が多くて疲れる.xmobarを入れて使いたいが,それっぽいものは今の所無いようだ.OSXは余程追い詰められない限り使わないと決心した.
他にはhttps://github.com/arnihermann/osxmonadといったものもあるようだったが,ワークスペースの実装がされていないと書いてあったため使わなかった.

最後に

Linuxはさいきょう

参考サイト

Xmonad on Apple OSX: Xmonad/Using xmonad on Apple OSX - HaskellWiki

xmonad Q&A: Can't build X11 due to ld linking error on OSX 10.9.2 · Issue #24 · xmonad/X11 · GitHub

彼女はちょっと純情すぎるだけなんだ: She is Haskell. : プログラマーが覚えておくべき10の英語フレーズ - NAVER まとめ

Amethyst: GitHub - ianyh/Amethyst: Automatic tiling window manager for OS X à la xmonad and i3.