Open17

また FreeBSD をインストールしようとしている私へ

KusaReMKNKusaReMKN

あなたのマシン構成について

あなたのマシンは Dell の XPS 8930 というらしいです。 詳細は自分で調べてください。

なんか Bluetooth は仕事をしなくなってしまっています。 Bluetooth モジュールを挿し直したら機嫌を直してくれたみたいです。

KusaReMKNKusaReMKN

ネットワークインターフェースについて

あなたのマシンについている NIC は Killer E2400 Gigabit Ethernet というものらしいです。 次のように実行すると確認できるはずです。

% dmesg | grep Ethernet
alc0: <Killer E2400 Gigabit Ethernet> port 0xd000-0xd07f mem 0xec500000-0xec53ffff at device 0.0 on pci4

OS のインストール中にネットワーク構成を DHCP で取得しようとすると通信できていないことに気付くと思います。 ひとまず頑張って手動で構成してください。

NIC を利用可能にするには /boot/loader.conf に下記を追加します。 詳細は man 4 alc を引けば書いてあります。

/boot/loader.conf
hw.alc.msix_disable="1"
KusaReMKNKusaReMKN

グラフィックについて

なんだかよくわかりませんが、NVIDIA のグラボが載っているらしいですね。 Xorg とかを使う関係でドライバをインストールしたほうが良さそうです。 次のように実行します。

# pkg install nvidia-driver

インストール時になんか言われていると思います。 もう一度言われたいときは pkg info -D ndivia-driver を実行すると聞かせてくれるようです。 次のように実行します。

# sysrc kld_list+=nvidia-modeset
# ed /usr/local/etc/X11/xorg.conf.d/driver-nvidia.conf	# for Xorg
a
Section "Device"
	Identifier "Card0"
	Driver     "nvidia"
EndSection
.
w
q

最後に再起動してください。

KusaReMKNKusaReMKN

日本語マニュアルについて

日本語マニュアルは ja-man-doc というパッケージをインストールすれば入ります。 しかし、これは eucJP で書かれているようなので、UTF-8 な環境で読むためには一手間必要です。 次のように実行しましょう。 lv は less と iconv を掛け合わせたような便利なやつです。

# pkg install ja-man-doc lv

さらに、設定ファイルが必要なので次のようにも実行します。

# ed /etc/manpath.config	# for jman
a
MANPATH_MAP	/bin		/usr/share/man
MANPATH_MAP	/usr/bin	/usr/share/man
MANPATH_MAP	/usr/bin	/usr/share/openssl/man
MANPATH_MAP	/usr/local/bin	/usr/local/man
MANPATH_MAP	/usr/X11R6/bin	/usr/local/man
.
w
q

最後に、cshrc にエイリアスと環境変数の設定をします (t?csh を使っているはずですよね)。

setenv	LV	-Ou8
alias	jjman	'env LC_CTYPE=ja_JP.eucJP jman -P lv'
alias	ujman	'env LC_CTYPE=ja_JP.UTF-8 jman -P lv'

ああもう、B シェルを使っているあなたはこっちです (怪しいけど)。

export LV='-Ou8'
alias jjman='LC_CTYPE=ja_JP.eucJP jman -P lv'
alias ujman='LC_CTYPE=ja_JP.UTF-8 jman -P lv'

これで jjman man とか実行すれば日本語マニュアルが読めるはずです。 jjman で文字化けするときは ujman とすれば読めるかもしれません。 虚無が表示されるときは諦めて man で横文字を読みましょう。

KusaReMKNKusaReMKN

X Window System について

基本的なことは FreeBSD HandBook に書いてあるので参照してください。 日本語が信用ならない場合は英語版を読んでください。 ドライバについては、このスレッドのグラッフィックについて を参照してください。 X をインストールするだけなら次のように実行します。

# pkg install xorg

なお、Handbook (日本語) の 5.6.1. XDM の設定 の部分は完全に間違っています。 xdm_enable="YES" を追加する先は /etc/ttys ではなく /etc/rc.conf です (修正されると良いですね)。 修正されました。

KusaReMKNKusaReMKN

X の日本語入力について

日本語入力には uim-skk を利用しています。 uim の SKK は ibus や fcitx のそれよりも使い易い気がします。

さて、uim-skk を利用するには uim をインストールすれば良いはずです。 しかし、qt なプログラムの上で日本語入力を利用するためには uim-qt5 のインストールが必要なようです (ここで時間を溶かした)。 ついでに uim-gtk もインストールしておきましょう。

# doas pkg install uim-gtk uim-qt5

そして、~/.xinitrc を記述します。 まずはシステムの xinitrc をコピーしてきましょう。

% cp /usr/local/etc/X11/xinit/xinitrc ~/.xinitrc

日本語入力に関する設定を記述していきます。 この設定が最適解でないことは明らかですが、動いたので良しとします。

% ed ~/.xinitrc
/twm/i
export XMODIFIERS='@im=uim'
export GTK_IM_MODULE='uim'
export QT_IM_MODULE='uim'
export XIM='uim'
export XIM_PROGRAM='uim'
uim-xim &
.
w
q

次に X window system を起動します。

% startx

そして uim の設定をします。 XTerm から次のように実行します。 GUI が使えるので簡単にできるはずです。 SKK だけを有効にしておきましょう。

% uim-pref-gtk &

これで X を再起動すれば快適な日本語生活が手に入るはずです。

追加(2024-07-27)

記事になりました: 日本語入力に SKK を使ってみる話

KusaReMKNKusaReMKN

印刷とプリンタについて (CUPS)

印刷には CUPS を使います。 CUPS は Common UNIX Printing System の頭字語です。 やはり基本的なことはハンドブック (英語) に書いてあります。 まずは読んでください。 CUPS をインストールするには次のように実行します。

# pkg install cups

私が使っているプリンタは HP Deskjet 3520 です。 HP のプリンタのためのパッケージもあります。 これもインストールしておきましょう (Linux を使う場合でもやはり必要ですね)。

# pkg install hplip

CUPS を有効にするために設定を記述します。 ハンドブックの指示に従います。

# sysrc cupsd_enable="YES"
# sysrc devfs_system_ruleset="system"
# service devfs restart
# service cupsd restart

CUPS の設定はウェブブラウザから行います (調べればそれ以外の方法もあるでしょう)。 631 番ポートで listen しているので突いてください。 デフォルトでは localhost からのアクセスしか受け付けていないようです。 外部から突きたい場合は次のように実行します (セキュリティに注意)。

# cupsctl --remote-admin

あとは適当に設定します。 ページにアクセスして 管理 タブから プリンターの追加 を選択します。 HP のプリンタを設定するなら AppSocket/HP JetDirect を選択し、それ以外なら適切なものを選択します。 プリンタの IP アドレスやらなんやらを設定し、プリンタ名などを設定したら完成です。 追加で用紙のサイズとかサーバのデフォルトプリンタとか適当に設定してください。

さて、ここまで設定しても lp(1) は言うことを聞きません。 未知のプリンタだと文句を付けてくるはずです。

% lp
lpr: lp: unknown printer

これは、いま実行している lp と CUPS が想定している lp が異なることによるものです。 実行されている lp/usr/bin/lp で、lpr/usr/bin/lpr でしょう。

% which lp
/usr/bin/lp
% which lpr
/usr/bin/lpr

対して、CUPS が想定している lplpr/usr/local/bin に配置されているものです。 FreeBSD Forum では /usr/bin に配置されいているコマンドを /usr/local/bin への symlink に置き換えるなんて壮大かつ勇敢なことをして対応していますが、小心者なのでユーザレベルで対応することにします。 次のように実行します。

% mkdir -p ~/.local/bin
% ln -s /usr/local/bin/lp* $HOME/.local/bin/.

そして cshrc に PATH を追加するように書き加えます。

if ( -d $HOME/.local/bin ) then
	setenv	PATH	$HOME/.local/bin:$PATH
endif

そして exec $SHELL で cshrc を読み直したり rehash でハッシュテーブルをクリアしたりすれば lp* 系のコマンドが問題なく使えるようになるはずです。

KusaReMKNKusaReMKN

無線 LAN (Wi-Fi) について

無線 LAN を利用する方法については FreeBSD Handbook (英語) の 33.3 Wireless Networking に記述されています。

まずは無線 LAN デバイスの識別子を得るために次のように実行します。 次の例では iwn0 がデバイス識別子です。

% sysctl net.wlan.devices
net.wlan.devices: iwn0

次に SSID と PSK のペアを設定します。 /etc/wpa_supplicant.conf に次のように記述します。 複数のペアを記述することもできます。

/etc/wpa_supplicant.conf
network={
	ssid="hogehoge-ssid"
	psk="hogehoge-psk"
}
network={
	ssid="fugafuga-ssid"
	psk="fugafuga-psk"
}

そして /etc/rc.conf に設定を記述します。 iwn0 を適当な識別子に置き換える必要があります。 この設定では DHCP を利用して IP アドレス等を設定します。

/etc/rc.conf (追加)
wlans_iwn0="wlan0"
create_args_wlan0="country JP regdomain JAPAN"
ifconfig_wlan0="WPA SYNCDHCP"

最後にネットワークサービスを再起動します。 慎重になるならコンピュータを再起動してください。

# service netif restart
KusaReMKNKusaReMKN

Apache について

そもそも私が FreeBSD に興味を持ったきっかけはくいなちゃんのツイートにあったのでした。

まずは Apache 2.4.x をインストールします。

# pkg install apache24

そして /usr/local/etc/apache24/httpd.conf コメントアウトされている行を有効にし、適当なサーバ名を設定します。

# ed /usr/local/etc/apache24/httpd.conf
/#ServerName/s/^#//
w
q

Apache を起動するために rc.conf に設定を追加する必要があります。 accept(2) の挙動を変化させるキショいオプションも有効にしておきます。

# sysrc apache24_enable=YES
# sysrc apache24_http_accept_enable=YES

Apache を再起動したり設定ファイルを検証したりするには apachectl コマンドを使います。

# apachectl restart
# apachectl configtest

デフォルトのドキュメントルートは /usr/local/www/apache24/data です。

KusaReMKNKusaReMKN

CPU 温度を調べる

まずは coretemp モジュールを読み込む必要があります。 AMD の CPU を使っているなら amdtemp モジュールを読み込むようです。 一時的に読み込むだけなら kldload(8) を使うと良いです。

coretemp モジュールを読み込む
# kldload coretemp

CPU の温度は sysctl(8) で確認できます。

CPU の温度を確認する
% sysctl -a dev.cpu | grep temperature
dev.cpu.3.temperature: 74.0C
dev.cpu.2.temperature: 71.0C
dev.cpu.1.temperature: 72.0C
dev.cpu.0.temperature: 71.0C
KusaReMKNKusaReMKN

ディスクイメージをマウントする

Linux では loop デバイスを勝手に作ってよしなにしてくれるんですけどね。

FreeBSD でディスクイメージをマウントするには md(4) を利用します。 md デバイスは GENERIC カーネルに組込まれているように思われます。

まず、仮想のデバイスであるメモリディスク md0/dev の配下に生やします。mdconfig のオプション -u の引数の数字を変えるとデバイスファイルの番号が変わります。 メモリディスクをマウントすれば、ディスクイメージに格納されているファイルにアクセスできます。

ディスクイメージのマウント
# mdconfig -a -t vnode -f disk.img -u 0
# mount -t msdosfs /dev/md0 /mnt

アンマウントしたのち、メモリディスクも削除するのが良い考えでしょう。

ディスクイメージをアンマウントする
# umount /mnt
# mdconfig -d -u 0
KusaReMKNKusaReMKN

X11 で CapsLock を Ctrl にする

CapsLock に深い恨みがあるわけではないですが、不意に押下するとやはり厄介なのです。

FreeBSD に X11 をインストールしたときについてくるデフォルトの xinitrc は $HOME/.Xmodmap の存在を調べ、存在する場合にこれを読み込むように働きかけてくれますから、この仕組みを利用します。

$HOME/.Xmodmap
clear lock
keycode 66 = Control_L
add control = Control_L Control_R

や、もしかしたらなんか自動で読み込まれないかもしれないですね、これ。手動で読み込めば良いのです。

% xmodmap ~/.Xmodmap