xmonad - FreeBSD 13.4 - 環境構築

クラウディア 
1. 概要
2. インストール
3. SDDM カスタマイズ
4. 初期化ファイルの作成
5. ログインマネージャ起動

1. 概要

 下記のデスクトップ環境を構築する手順を記述します。
種  別 リソース・設定  備考 
ホスト Windows11 Version 23H2
VitualBox Version 7.1.4
ゲスト FreeBSD 13.4 RELEASE
ログインマネージャ SDDM
仮想システムタイプ BSD
仮想サブシステムタイプ FreeBSD
仮想システムバージョン FreeBSD (64bit)
ハードディスク 160 GB
メモリ 4 GB
CPU 2コア
グラフィックスコントローラ VBoxSVGA 128MB 3D Disable

 ここまでの時点で、システムインストールと「VirtualBox Guest Additions」の設定は終わっているものとします。
 ぞれぞれのインストール・設定に関しては

	「FreeBSD - デスクトップ環境構築 - 共通事項 - システムインストール」
	「FreeBSD - デスクトップ環境構築 - 共通事項 - VirtualBox Guest Additions」

 をご参照ください。

2. インストール


pkg install -y xorg numlockx ja-font-migmix
pkg install -y sddm sddm-freebsd-black-theme cursor-neutral-white-theme

pkg install -y hs-xmonad hs-xmobar hs-cabal-install hs-stack pkgconf
 バージョンの推移です。 ・2020年 7月 9日 「FreeBSD 11.4 RELEASE」 「0.15_4」 ・2020年11月19日 「FreeBSD 12.2 RELEASE」 「0.15_6」 ・2027年 7月 7日 「FreeBSD 13.0 RELEASE」 「0.15_8」 ・2022年 1月 7日 「FreeBSD 13.0 RELEASE」 「0.15_9」 ・2023年 1月 6日 「FreeBSD 12.4 RELEASE」 「0.17.0_1」 ・2023年 5月23日 「FreeBSD 13.2 RELEASE」 「0.17.1」 ・2024年 1月31日 「FreeBSD 14.0 RELEASE」 「0.17.1」 ・2024年 3月29日 「FreeBSD 13.3 RELEASE」 「0.17.1」 ・2024年 6月19日 「FreeBSD 14.1 RELEASE」 「0.18.0」  2024年6月19日の時点で、下記のバージョンでした。

$ xmonad --version
xmonad 0.18.0

3. SDDM カスタマイズ

 ログイン画面の解像度を「1366x768」とし、キーボードレイアウトを「jp.106」にします。  「root」ユーザ権限で。

sh
cat << 'EOF' >>  /usr/local/share/sddm/scripts/Xsetup

xrandr --output VGA-0 --mode 1366x768 --rate 60
setxkbmap -layout jp
EOF
exit
 ログイン画面のテーマとカーソルを変更します。  「root」ユーザのまま

sddm --example-config > /usr/local/etc/sddm.conf
vi /usr/local/etc/sddm.conf

[Theme]
# Current theme name
Current=breeze

# Cursor size used in the greeter
CursorSize=

# Cursor theme used in the greeter
CursorTheme=breeze_cursors
 を下記へ変更します。

[Theme]
# Current theme name
Current=sddm-freebsd-black-theme

# Cursor size used in the greeter
CursorSize=

# Cursor theme used in the greeter
CursorTheme=Neutral++_White

4. 初期化ファイルの作成

 「root」ユーザ権限で。

sh
cat << 'EOF' >> /etc/profile
export LC_ALL="ja_JP.UTF-8"
export LANGUAGE="ja_JP.UTF-8"
export LANG="ja_JP.UTF-8"
EOF

cat << 'EOF' >> /etc/csh.cshrc
setenv LC_ALL   "ja_JP.UTF-8"
setenv LANGUAGE "ja_JP.UTF-8"
setenv LANG     "ja_JP.UTF-8"
EOF

cat << 'EOF' >> /usr/share/skel/dot.xinitrc
#!/bin/sh
#
/usr/local/bin/VBoxClient-all
#
setxkbmap -layout jp
numlockx on
xsetroot -cursor_name left_ptr
export DESKTOP=xmonad
exec xmonad
EOF
chmod +x /usr/share/skel/dot.xinitrc
exit
 「xsetroot -cursor_name left_ptr」は、カーソルの形状設定です。  既存のログインユーザで。

cp /usr/share/skel/dot.xinitrc ~/.xinitrc
 最低限の「xmonad」の環境を作成。  ログインユーザで。

mkdir -pv ~/.xmonad
cp /usr/local/share/examples/xmonad/build ~/.xmonad/build
cp /usr/local/share/examples/xmonad/xmonad-config.cabal ~/.xmonad/xmonad-config.cabal
vi ~/.xmonad/xmonad-config.cabal
 短いので、全行記述しますが(わはは、「cabal」というファイルタイプのシンタックスハイライトはできない)

name:          xmonad-config
version:       0.0
synopsis:      XMonad Config File
homepage:      http://xmonad.org
license:       BSD2
license-file:  LICENSE
author:        Peter Jones <pjones@devalot.com>
maintainer:    Peter Jones <pjones@devalot.com>
copyright:     Copyright (c) 2016,2017 Peter J. Jones
category:      Graphics
build-type:    Simple
cabal-version: >=1.8

executable xmonad-config
  main-is: config.hs
  build-depends: base, xmonad, xmonad-contrib
 最終行だけ、変更します。

executable xmonad-config
  main-is: config.hs
  build-depends: base, xmonad, xmonad-contrib, containers
 これ、一回こっきりしかチャンスないので間違えないように、ご注意ください。  以降の処理で「~/.xmonad/xmonad-config.cabal」は、変わってしまいます。  変更したいときは、ここまで戻って、「~/.xmonad/」配下を全部削除して、一から作り直さなければなりません。

vi ~/.xmonad/config.hs
 これが、カスタマイズファイルになります。
import XMonad
import Data.Monoid
import System.Exit

import qualified XMonad.StackSet as W
import qualified Data.Map        as M

import XMonad.Hooks.ManageHelpers(doFullFloat, doCenterFloat, isFullscreen, isDialog)
import XMonad.ManageHook
import XMonad.Util.NamedScratchpad

myTerminal      = "xterm"

-- Whether focus follows the mouse pointer.
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True

-- Whether clicking on a window to focus also passes the click to the window
myClickJustFocuses :: Bool
myClickJustFocuses = False

myModMask       = mod4Mask

myNormalBorderColor  = "#dddddd"                                    -- 通常のウィンドウ枠色
myFocusedBorderColor = "#008000"                                   -- フォーカスウィンドウの枠色

myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
    [
      ((modm , xK_Return),         spawn $ XMonad.terminal conf)   --	端末を開く
    , ((modm,  xK_q     ),         kill)                           --	閉じる
    , ((modm , xK_m     ),         spawn $ "xfce4-appfinder")      --	メニュー
    , ((modm , xK_n     ),         windows W.focusDown)            --	フォーカス切り替え
    , ((modm , xK_j     ),         windows W.swapMaster)           --	フォーカスを最前面
    , ((modm .|. shiftMask, xK_r), spawn $ "xmonad --recompile; xmonad --restart")  --	再設定
    , ((0,             xK_Print ), spawn $ "xfce4-screenshooter -c -f")             --	画面キャプチャ
    , ((controlMask,   xK_Print ), spawn $ "xfce4-screenshooter -c -w")
    , ((modm .|. shiftMask, xK_q), io (exitWith ExitSuccess))      --	ログアウト
    , ((modm , xK_b     ),         spawn "sudo reboot")            --	再起動
    , ((modm , xK_s     ),         spawn "sudo poweroff")          --	シャットダウン
    ]

myXfce4Float = customFloating $ W.RationalRect (40/1366) (40/786) (400/1366) (500/786)
myFcitxFloat = customFloating $ W.RationalRect (50/1366) (50/786) (700/1366) (500/786)

myManageHook = composeAll
    [
      className =? "MPlayer"                    --> doFloat
    , className =? "Alacritty"                  --> doFloat
    , className =? "Atril"                      --> doFloat
    , className =? "Brasero"                    --> doFloat
    , className =? "Chromium-browser"           --> doFloat
    , className =? "Clamtk"                     --> doFloat
    , className =? "Claws-mail"                 --> doFloat
    , className =? "Code - OSS"                 --> doFloat
    , className =? "Conky"                      --> doFloat
    , className =? "Eclipse"                    --> doFloat
    , className =? "Epdfview"                   --> doFloat
    , className =? "Gimp"                       --> doFloat
    , className =? "Gimp-2.10"                  --> doFloat
    , className =? "Lxappearance"               --> doFloat
    , className =? "Midori"                     --> doFloat
    , className =? "Nautilus"                   --> doFloat
    , className =? "Nitrogen"                   --> doFloat
    , className =? "Pamac-manager"              --> doFloat
    , className =? "Pcmanfm"                    --> doFloat
    , className =? "Roxterm"                    --> doFloat
    , className =? "Synaptic"                   --> doFloat
    , className =? "Termite"                    --> doFloat
    , className =? "Thunar"                     --> doFloat
    , className =? "Thunderbird"                --> doFloat
    , className =? "Tilix"                      --> doFloat
    , className =? "URxvt"                      --> doFloat
    , className =? "UXTerm"                     --> doFloat
    , className =? "Vivaldi-stable"             --> doFloat
    , className =? "XTerm"                      --> doFloat
    , className =? "Xfce4-terminal"             --> doFloat
    , className =? "firefox"                    --> doFloat
    , className =? "libreoffice-startcenter"    --> doFloat
    , className =? "mpv"                        --> doFloat
    , className =? "octopkg"                    --> doFloat
    , className =? "qpdfview"                   --> doFloat
    , className =? "smplayer"                   --> doFloat

    , className =? "Xfce4-appfinder"    --> myXfce4Float
    , className =? "Fcitx-config-gtk"   --> myFcitxFloat
    , className =? "Fcitx-config-gtk3"  --> myFcitxFloat

    , resource  =? "desktop_window"     --> doIgnore
    , resource  =? "kdesktop"           --> doIgnore
    ]

myStartupHook = do
    spawn "$HOME/.xmonad/scripts/autostart.sh"

main = xmonad defaults

defaults = def {
        terminal           = myTerminal
       ,focusFollowsMouse  = myFocusFollowsMouse
       ,clickJustFocuses   = myClickJustFocuses
       ,modMask            = myModMask

       -- 枠の色
       ,normalBorderColor  = myNormalBorderColor
       ,focusedBorderColor = myFocusedBorderColor

       ,keys               = myKeys
       ,manageHook         = myManageHook
       ,startupHook        = myStartupHook
       }

 「--」以降以外は、スペースはきちんとスペースをいれます。  タブで飛ばすと、山ほど、ワーニングが出力されます。  上記のファイルを作成後。

cabal new-update
~/.xmonad/build
xmonad --recompile
 この一連の手順で

~/.xmonad/xmonad-x86_64-freebsd
 というカスタマイズされた実行ファイルができます。  カスタマイズしていない場合は、端末を開くのが Alt+Shift+Enter で、ログアウトが Alt+Shift+q になります。  カスタマイズしていない状態は、下記のファイルを読んでください。

/usr/local/share/examples/xmonad/xmonad.hs
 自動起動のファイルを作成します。

mkdir -pv ~/.xmonad/scripts

sh
cat << 'EOF' >> ~/.xmonad/scripts/autostart.sh
#!/bin/sh

run()
{
  if ! pgrep $1 ;
  then
    $@&
  fi
}

run "/usr/local/bin/VBoxClient-all"
run "xmobar"
EOF
exit

chmod +x ~/.xmonad/scripts/autostart.sh

5. ログインマネージャ起動

 前項までインストール・設定したものを有効にします。  「root」ユーザ権限で。

sysrc dbus_enable=YES
sysrc sddm_enable=YES
 起動します。

service dbus start
service sddm start
 うまく設定できていれば、ログイン画面が表示されます。  ユーザ名・パスワードを入力してログインします。
「xmonad FreeBSD 13.4」-「ログイン画面」

AbemaTV 無料体験
それがだいじWi-Fi
earthcar(アースカー)
葬送のフリーレン Prime Video