デスクトップ環境の更新

今まで

普段はLenovoのThinkpad X201iにNetBSDをインストールし,Xfce4,tcsh,vim,git,firefoxなどを使っていました.しかしXfce4の更新をしているときにpkgsrcで依存関係を手動で解決する必要が出てきてしまい,時間も手間もかかって面倒だったので別のデスクトップ環境を探すことにしました.

候補

いくつか候補はありました.

まずビルドに時間がかかるので上3つは除外.残る選択肢はウィンドウマネージャのみを使い原始的なデスクトップ環境にするというものです.jwmやfluxboxは使ったことがあり導入はすぐ終わるだろうと思いました.しかし風の噂で タイル型マネージャがすごいと聞いていたので,ものは試しとi3wmに挑戦してみることにしました.

i3wm導入

インストール

# cd /usr/pkgsrc/wm/i3
# make install clean clean-depends

$HOME/.xsession

#!/bin/sh

# 言語
export LANG="ja_JP.UTF-8"

# フォント
xset fp+ /usr/pkg/share/fonts/X11/TTF/

# キーボードレイアウト
setxkbmap -layout us -option ctrl:nocaps
xset b off

# インプットメソッド(ibus)
export XMODIFIERS="@im=ibus"
export GTK_IM_MODULE="xim"
export QT_IM_MODULE="xim"
ibus-daemon -d -x

# i3wm
/usr/pkg/bin/i3

$HOME/.config/i3/config

# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#

# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!

set $mod Mod4

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:Ricty 12

# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8

# Before i3 v4.8, we used to recommend this one as the default:
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
# The font above is very space-efficient, that is, it looks good, sharp and
# clear in small sizes. However, its unicode glyph coverage is limited, the old
# X core fonts rendering does not support right-to-left and this being a bitmap
# font, it doesn’t scale on retina/hidpi displays.

# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod

# start a terminal
bindsym $mod+Return exec /usr/pkg/bin/xfce4-terminal

# kill focused window
bindsym $mod+Shift+q kill

# start dmenu (a program launcher)
#bindsym $mod+d exec dmenu_run
# There also is the (new) i3-dmenu-desktop which only displays applications
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
# installed.
bindsym $mod+d exec --no-startup-id i3-dmenu-desktop

# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right

bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right

bindsym $mod+Shift+e exit
bindsym $mod+Shift+r restart

mode "resize" {
    bindsym h resize shrink width 10 px or 10 ppt
    bindsym j resize grow height 10 px or 10 ppt
    bindsym k resize shrink height 10 px or 10 ppt
    bindsym l resize grow width 10 px or 10 ppt

    bindsym Return mode "default"
}

bindsym $mod+r mode "resize"

/etc/X11/xorg.conf

いつもX201iにVGA接続でディスプレイを1枚つけています.Xfce4などの高機能なIDEはディスプレイの拡張などを自動でやってくれますがウィンドウマネージャのみの環境ではそんなことしてくれません.xorg.confすら生成しないでXを使っていたのでこれは少し面倒でした.

# X -configure
# mv ~/xorg.conf.new /etc/X11/xorg.conf

xrandr -qコマンドを使うとディスプレイの情報が一覧として出力されます.それを読んで設定をおこないました.

# xrandr -q
Screen 0: minimum 8 x 8, current 3200 x 1080, maximum 32767 x 32767
LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm
   1280x800      60.00*+  49.99  
   1024x768      60.00  
   800x600       60.32    56.25  
   640x480       59.94  
DP1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
VGA1 connected primary 1920x1080+1280+0 (normal left inverted right x axis y axis) 509mm x 286mm
   1920x1080     60.00*+
   1680x1050     59.95  
   1600x900      59.98  
   1280x1024     75.02    60.02  
   1280x960      75.04  
   1360x768      59.80  
   1152x864      75.00  
   1024x768      75.08    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08  
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
#

この情報をもとに,xorg.confのMonitorセクションを以下のように書き換えました.

Section "Monitor"
    Identifier    "VGA1"
    Option        "Primary" "true"
EndSection

Section "Monitor"
    Identifier    "LVDS1"
    Option        "LeftOf" "VGA1"
EndSection

外部ディスプレイ(VGA1)をプライマリにし,それの左側にX201iのディスプレイ(LVDS1)が配置されるようにしています.このようなイメージです.

       +---------------+
+-----+|               |
|LVDS1||     VGA1      |
|     ||               |
+-----+|               |
       +---------------+

ターミナルエミュレータ

標準ではxtermですが,僕はXfce4で使い慣れたXfce4-terminalを使っています.設定が残っていたので新しいエミュレータを探して設定し直すより断然楽です.

# cd /usr/pkgsrc/x11/xfce4-terminal
# make install clean clean-depends

感想

快適です.$modに割り振っているWinキーが押しにくいのを除けば,vimのキーバインディングで色々な操作ができ覚えることが少なくてよいです.マウスでウィンドウの配置を調整する手間が省けるとここまで快適になるとは思っていませんでした.ビルドもi3wmのほうがXfce4より圧倒的に早く済みます.マルチディスプレイの設定が面倒でずっとIDEを使っていましたが,設定が意外と楽だと気づいたので食わず嫌いはダメですね.