平成最後の Linux デスクトップ環境

慶應義塾大学ロボット技術研究会その2 17日目

こんにちは、mt_caretです。Linux デスクトップ環境 2017 – k0kubun’s blog に影響されようかと思ったらLinux デスクトップ環境 2018 – 遺言書Linux デスクトップ環境 2018 が既にあったのでタイトルを変えてみました。

ということで、統計的学習の次は、またもやロボットに大変関係があるLinuxデスクトップ環境について書いていこうと思います。

淡々とした紹介に加えて、エヴァンジェリズムっぽい内容を交互に入れていくので取捨選択して読んでいって下さい。

ディストリビューション

元々はMBA上でArch LinuxとOS X1をデュアルブートして使っていましたが、諸々のバージョンを上げたりファームウェアのアップグレードをする度に起動がしなくなり、一々治すのが面倒になり全部消してOSXを入れ直して使っていました。パソコンを新調するタイミングで新しいワークフローに挑戦しようと思い2、Linuxに切り替えることを決断し、ついでにタイリングウィンドウマネージャへの切り替えや触ったことのないディストリビューションを使ってみることに。新しいノートパソコンは Linuxが入りやすそうなThinkpad x270を選びました。

ノートパソコンを購入したのが去年の4月で、それ以来NixOSというディストリビューションを入れてメインマシンとして使っています。 NixOSはNixという大変面白いパッケージマネージャをパッケージの管理だけでなくOSの構成の管理まで拡張したLinuxディストリビューションです。

Nixについて – Speaker Deck

NixOSはいいぞ

簡単にまとめると、NixOSはソフトウェアパッケージおよびOSの構成をNix言語の DSLで記述すると、決定論的かつロールバック可能なOSの構成変更(のようなもの)を提供します。構成を変更する度に新しいGRUBエントリが出来るので、アップグレードや設定の変更により起動しなくなった場合は、1つ前のGRUBエントリを選ぶことにより何事もなかったように前の状態で起動することができます。また、OSの構成はdotfilesとともに gitで管理して、マシン間の共通部分を切り出して共有することによって、新しいマシンのセットアップはほぼgit cloneとちょっとした編集で済むようになり、自分のマシンをInfrastructure as Codeっぽく運用しています。

NixOS自体は基本的に安定している上に、bleeding edgeなソフトウェアを使っても素早く復元できたり環境が汚染されることに臆することなくソフトウェアを導入できたりするため、今までパソコンを触ってきて感じたことのない心地よさを味わっています。

NixOSを使っていく上で

OSの安定性・OSのパッケージとユーザプロファイルのパッケージの互換性 (glibcのロケールの互換性等)を確保しつつ可能な限りバイナリキャッシュに乗るように、 nixpkgs, nixosは最新のOSバージョンのチャンネルを基本的に利用し、 youtube-dl等で最新パッケージが欲しい時のためnixpkgs-unstableも登録しています。

delta@dn:~ % nix-channel --list
nixpkgs https://nixos.org/channels/nixos-18.09
nixpkgs-unstable https://nixos.org/channels/nixpkgs-unstable
delta@dn:~ % sudo nix-channel --list
nixos https://nixos.org/channels/nixos-18.09

これで例えばnix-env -iA nixpkgs.youtube-dlnixos-18.09チャンネルのパッケージを入れることができ、nix-env -iA nixpkgs-unstable.youtube-dlで最新のパッケージも入れることができます。

大体のことはNixOSでできますが、言語パッケージマネージャだったり Linuxバイナリを勝手に裏で落としてくるようなソフトウェアとはそこそこ相性が悪く、どうしても上手く動かないことがあります。そういう時はLXDコンテナ内で Ubuntuを動かして、その上で使ったりしています。EmacsみたいなGUIのあるソフトウェアはSSHのX転送経由で利用していますが、頑張れば音声含め上手くやることも可能なようです

ウィンドウマネージャ

Haskellが好きなのでxmonad(services.xserver.windowManager.xmonad.enable = true;) を使い、それと一緒にxmobar・trayer・rofiを使っています。特に不自由を感じていないので他のウィンドウマネージャは試したことはありません。あるときtaffybarに移行しましたが、バージョンの互換性の維持だったりNixOSとの相性の問題で結局xmobarに戻ってきました。

ディスプレイマネージャはLightDM (services.xserver.displayManager.lightdm.enable = true;)、コンポジターはcompton(services.compton.enable = true;)、スクリーンロックは slock(programs.slock.enable = true;)を使っています。

trayerにはnmapplet・udiskieあたりを並べてdunstで通知を表示しています。

プロジェクターの利用とかで一々xrandrを叩くのは面倒くさいのでarandrを使っています。

XMonadはいいぞ

タイリングウィンドウマネージャを一度使ってみると戻れなくなります。使ってへんのはお前だけ。

Haskellが億劫ならこの際awesomeとかi3とかでもいいです。無駄なマウス操作による人生の浪費はもうやめにしませんか?

ターミナル内での生活

ずっとalacrittyを使っていたものの、レイテンシが気になって最近mltermに乗り換えました。ついでにalacrittyでは何故かできなかったウィンドウの半透明化だったりw3imgdisplayによる画像の表示ができるようになったので大変満足しています。強いて言うならば、使っているフォント (RictyDiminished-with-FiraCode) のLigatureが表示されないのが気になりますが、今の所このマシンで上手く表示できた試しがないので半ば諦めています。

ウィンドウマネージャを使っている関係でキーバインドを多用してターミナル内で生活したほうが都合がよいので、可能な限り生活がターミナル内で簡潔するようにしています。具体的には:

  • ターミナルマルチプレクサはtmux
  • ファイルマネージャはranger
  • 簡単な編集のためのエディタはvim
  • 音楽プレーヤはcmus

を使っています。

ターミナル内での生活はいいぞ

tmux, ranger, vimの組み合わせは基本的人権です。特にrangerのw3imgdisplayによる画像プレビュー機能のおかげで普通のファイルマネージャーに対する未練が消えました。後は、しょっちゅうSSH先でrangerって打っては怒られるやつをやっています。

ターミナル外の生活

各種メディア・オフィス系のファイルはrangerから適宜vlc・feh・evince・libreoffice あたりを起動しては使っている感じです。

ブラウザはFirefoxを利用して、Tree Style Tabsで大量のタブを開いてvim-vixenでマウスを極力使わずに操作できるようにしています。パスワードはLastPassで管理をしていますが、近い内にKeePassXCに移行しようと思っています。

メモリを16GB積んでいるのにFirefoxが10GBぐらい食ってるせいで仮想マシンでも動かそうものなら大量のswappingが発生してしまうので困っています。

エディタはDoom Emacsをパソコンの起動時に一緒に起動し、常駐させています。

Doom Emacsはいいぞ

vimキーバインディングで生きているけれど、Vimscriptを学ぶのが億劫で、新しい言語を触る度にエディタの設定で消耗していましたが、インターン先でSpacemacsを知り、使っていたのでメインマシンの方でもそれを使うようになりました。

Spacemacsが如何によいエディタかどうかは無限に語られているのでそちらに任せるとして、ある程度Spacemacsを使っていると、操作が若干もっさりしていたり、vimでは一瞬でできる操作で固まることが気になってきます。

そこでDoom Emacsです。単純にSpacemacs がめちゃくちゃはやくなった感じです。最高です。この文章もDoom Emacsで書いています。 Spacemacsと微妙にキーバインディングが違うのが気になりますが人間慣れる生き物です。一週間で成れました。Spacemacsを使っている皆さんも慣れます。

vimやSpacemacsから移行する時は、次の資料が簡潔にまとまっていてオススメです3:

Getting started with Doom Emacs — A great transition from Vim to Emacs

この先の展望

NixOSの導入から1年半以上経っていますが、ワークフローに積極的に手を入れていってより心地よいパソコンタライフを得ていきたいと思います。


  1. それは、まだmacOSがOSXと呼ばれていた時代…↩
  2. OSXを使っていて何かしらの不満があったような気がしますが、思い出せません。↩
  3. 公式のREADMEに載っている手順だと安定ブランチを使うように言われるんですが、最新ブランチの方じゃないと機能面・バグフィックス等の面で使い物になりません。↩
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中