- 1. 概要
- 2. インストール
- 3. SDDM カスタマイズ
- 4. ユーザ用初期化ファイルの作成
- 5. /etc/rc.conf 編集
- 6. ログインマネージャ起動
- 7. トラブルシュート
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 py38-qtile
2020年 9月 4日の時点で、「FreeBSD 11.4 RELEASE」へインストールした時期は、「python」のモジュールのバージョンがあっていないため、モジュールの入れ替えが必要でした。
2020年11月13日、「FreeBSD 12.2 RELEASE」へのインストール以降は、パッケージが更新されているようで、上記の手間はかかりませんでした。
2022年 1月 4日、「FreeBSD 13.1 RELEASE」へのインストール以降は、パッケージが変わっています。
2020年9月4日「FreeBSD 11.4 RELEASE」へのインストール、2020年11月13日「FreeBSD 12.1 RELEASE」へのインストール、2021年7月1日「FreeBSD 13.0」へのインストール時は、「qtile-0.14.2」でした。
2022年1月4日「FreeBSD 12.3 RELEASE」へのインストールの時点で、「py38-qtile-0.18.1e」でした。
2022年5月25日の時点で、下記のバージョンでした。
$ pkg info py38-qtile
py38-qtile-0.18.1_1
Name : py38-qtile
Version : 0.18.1_1
Installed on : Wed May 25 10:57:11 2022 JST
Origin : x11-wm/qtile
Architecture : FreeBSD:13:*
Prefix : /usr/local
Categories : x11-wm
Licenses : MIT
Maintainer : ericbsd@FreeBSD.org
WWW : http://qtile.org
Comment : Small, flexible, scriptable tiling window manager written in Python
Options :
DOCS : on
Annotations :
repo_type : binary
repository : FreeBSD
Flat size : 3.20MiB
Description :
Qtile is simple, small, and extensible. It's easy to write your own layouts,
widgets, and built-in commands.
Qtile is written and configured entirely in Python, which means you can
leverage the full power and flexibility of the language to make it fit your
needs.
WWW: http://qtile.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」ファイルは、作成せず、「SDDM」の機能を利用して、「.xinitrc」で起動していました。
現在は、「.desktop」ファイルから起動できるようです。
「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 &
EOF
exit
chmod +x /usr/share/skel/dot.xsession
「VBoxClient」の起動は、次ページ以降、自動起動の設定で行います。
既存のログインユーザで、まず、セッション開始の手順をスケルトンよりコピー。
cp /usr/share/skel/dot.xinitrc ~/.xinitrc
ログインユーザ用の起動時のスクリプトをシステムファイルからコピーします。
mkdir -pv ~/.config/qtile/
cp /usr/local/lib/python3.8/site-packages/libqtile/resources/default_config.py ~/.config/qtile/config.py
5. /etc/rc.conf 編集
前項までインストール・設定したものを有効にします。
「root」ユーザ権限で。
sysrc polkitd_enable=YES
sysrc dbus_enable=YES
sysrc sddm_enable=YES
6. ログインマネージャ起動
「root」ユーザ権限で。
service dbus start
service sddm start
うまく設定できていれば、ログイン画面が表示されます。
ユーザ名・パスワードを入力してログインします。

7. トラブルシュート
ところが、今回、ワナがありました。
依存するパッケージが、インストールされていないようです。
起動してみると
$ qtile
Traceback (most recent call last):
File "/usr/local/bin/qtile", line 33, in <module>
sys.exit(load_entry_point('qtile==0.18.1', 'console_scripts', 'qtile')())
File "/usr/local/bin/qtile", line 25, in importlib_load_entry_point
return next(matches).load()
File "/usr/local/lib/python3.8/importlib/metadata.py", line 77, in load
module = import_module(match.group('module'))
File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 843, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/lib/python3.8/site-packages/libqtile/scripts/main.py", line 6, in <module>
from libqtile.scripts import check, cmd_obj, migrate, run_cmd, shell, start, top
File "/usr/local/lib/python3.8/site-packages/libqtile/scripts/check.py", line 29, in <module>
from libqtile import confreader
File "/usr/local/lib/python3.8/site-packages/libqtile/confreader.py", line 31, in <module>
from libqtile.backend.x11 import core
File "/usr/local/lib/python3.8/site-packages/libqtile/backend/x11/core.py", line 45, in <module>
from libqtile.backend.x11 import window, xcbq
File "/usr/local/lib/python3.8/site-packages/libqtile/backend/x11/window.py", line 18, in <module>
from libqtile.backend.x11 import xcbq
File "/usr/local/lib/python3.8/site-packages/libqtile/backend/x11/xcbq.py", line 43, in <module>
import cairocffi.pixbuf
File "/usr/local/lib/python3.8/site-packages/cairocffi/pixbuf.py", line 22, in <module>
gdk_pixbuf = dlopen(
File "/usr/local/lib/python3.8/site-packages/cairocffi/__init__.py", line 45, in dlopen
raise OSError(error_message) # pragma: no cover
OSError: no library called "gdk_pixbuf-2.0" was found
no library called "libgdk_pixbuf-2.0-0" was found
cannot load library 'libgdk_pixbuf-2.0.so.0': Shared object "libgdk_pixbuf-2.0.so.0" not found, required by "python3.8"
cannot load library 'libgdk_pixbuf-2.0.0.dylib': Shared object "libgdk_pixbuf-2.0.0.dylib" not found, required by "python3.8"
cannot load library 'libgdk_pixbuf-2.0-0.dll': Shared object "libgdk_pixbuf-2.0-0.dll" not found, required by "python3.8"
ちゅうことで、依存するパッケージをインストール。
「root」ユーザ権限で。
pkg install -y gdk-pixbuf2
これで、やっとログインできるようになります。
|