xmonad - FreeBSD 13.1 - 環境構築

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

1. 概要

 下記のデスクトップ環境を構築する手順を記述します。
 種別   リソース・設定   備考 
ホスト Windows10 21H2
仮想環境 VirtualBox 6.1.34
ゲスト FreeBSD 13.1 RELEASE
ログインマネージャ SDDM
仮想システムタイプ BSD
仮想システムバージョン FreeBSD (64bit)
ハードディスク 180 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
 「pkgconf」は、いれておかないと、後で、「xmonad」の環境を作成するときに

cabal: The program 'pkg-config' version >=0.9.0 is required but it could not
 と言われちゃうのです。  2020年 7月 9日時点で、「FreeBSD 11.4 RELEASE」へインストールしたときが、「hs-xmonad-0.15_4」でした。  2020年11月19日時点で、「FreeBSD 12.2 RELEASE」へインストールしたときが、「hs-xmonad-0.15_6」でした。  2027年 7月 7日時点で、「FreeBSD 13.0 RELEASE」へインストールしたときが、「hs-xmonad-0.15_8」でした。  2022年 1月 7日時点で、「FreeBSD 12.3 RELEASE」へインストールしたときが、「hs-xmonad-0.15_9」でした。  2022年 5月30日時点で、下記のバージョンでした。  今回は、ぐっとあがっております。

$ pkg info hs-xmonad
hs-xmonad-0.17.0
Name           : hs-xmonad
Version        : 0.17.0
Installed on   : Mon May 30 17:59:13 2022 JST
Origin         : x11-wm/hs-xmonad
Architecture   : FreeBSD:13:amd64
Prefix         : /usr/local
Categories     : haskell x11-wm
Licenses       : BSD3CLAUSE
Maintainer     : haskell@FreeBSD.org
WWW            : https://xmonad.org/
Comment        : Tiling window manager
Options        :
        EXAMPLES       : on
Shared Libs required:
        libX11.so.6
        libXrandr.so.2
        libXext.so.6
        libgmp.so.10
        libXss.so.1
        libXinerama.so.1
        libffi.so.7
Annotations    :
        FreeBSD_version: 1300139
        repo_type      : binary
        repository     : FreeBSD
Flat size      : 2.76MiB
Description    :
xmonad is a tiling window manager for X.  Windows are arranged
automatically to tile the screen without gaps or overlap, maximising
screen use.  All features of the window manager are accessible from the
keyboard: a mouse is strictly optional.  xmonad is written and
extensible in Haskell.  Custom layout algorithms, and other extensions,
may be written by the user in config files.  Layouts are applied
dynamically, and different layouts may be used on each workspace.
Xinerama is fully supported, allowing windows to be tiled on several
screens.

WWW: https://xmonad.org/

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 theme used in the greeter
CursorTheme=breeze_cursors
 を下記へ変更します。

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

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

4. .desktop ファイルの作成

 ログイン時に有効となるよう、「.desktop」ファイルを作成します。  「root」ユーザ権限で。

mkdir -pv /usr/local/share/xsessions

sh
cat << 'EOF' >> /usr/local/share/xsessions/xmonad.desktop
[Desktop Entry]
Name=xmonad
Comment=A lightweight window manager for the X Windowing System
Exec=xmonad
Terminal=false
TryExec=xmonad
Type=Application
EOF
exit

5. 初期化ファイル作成

 「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
exit

sh
cat << 'EOF' >> /usr/share/skel/dot.xsession
#!/bin/sh
#
setxkbmap -layout jp
numlockx on
xsetroot -cursor_name left_ptr
EOF
exit

chmod +x /usr/share/skel/dot.xsession
 既存のログインユーザで、まず、セッション開始の手順をスケルトンよりコピー。  (新規ユーザ用は、今のところ(2022年5月30日)無理があるので、既存ユーザでの作業しかできません)

cp /usr/share/skel/dot.xsession ~/.xsession
 まずは、最低限の「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 =? "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

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

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

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

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

earthcar(アースカー)
それがだいじWi-Fi
U-NEXT
世界最大級のオンライン英会話EF English Live
ネットオークションの相場、統計、価格比較といえばオークファン
【usus ウズウズ】
薬屋の独り言