9月 182022
 

自宅のデスクトップ機自宅サーバに HP ProDesk 405 SFF/CT を購入しました。時期的にデスクトップ機は G6 、自宅サーバは G8 というタイミングです。

で、この二台は AMD Ryzen7 PRO CPU が搭載されています。 BIOS (UEFI) メニューを見ると AMD DASH というのに対応しているようです。

そもそも “AMD DASH” とはなんぞや?

簡単に言うと iLO みたいにリモートで BIOS を管理でる機能らしい。あくまで『らしい』のであります;-)。

AMD DASH を利用するためには PC 側に AMD DASH で利用するための IPv4 アドレスの設定が必要です。これは iLO と一緒ですね。

そして、管理用のマネージャーが必要です。マネージャーは以下の URL にアクセスしてダウンロードすることができます。

https://developer.amd.com/tools-for-dmtf-dash/

『AMD MANAGEMENT CONSOLE』ってのがそれにあたります。

確認してみると Windows 用の GUI と CLI 、各種 Linux 対応の CLI がダウンロードできるようです。
まぁ、『手元の Linux で CLI』より『手元の Windows で GUI』のほうが楽だろうと思い AMC-setup-7.0.0.956-AMD.exe をダウンロードし、手頃な WindowsOS にインストールします。

これでマネージャー側の準備は完了。では早速、デスクトップ機にアクセスしてみることにしましょうっ!! ってんですが、これが大変。

PC 側で AMD DASH を有効にして IP を付加させるまでの工程は随分と苦労するので、今回はそちらをメインに書いてみます。

 
1. BIOS (UEFI 画面。以降 BIOS 画面と記載) で AMD DASH を有効化
その通りですね。 BIOS 画面で [詳細設定] -> [システムオプション] を選択して下から二番目にある「AMD DASH」にチェックを入れます。



 
2. UEFI ドライバーからの「他社製オプション ROM の管理」へアクセス
「AMD DASH」にチェックを入れたあと、次に BIOS 画面で [UEFI ドライバー] を選択し、そこに表示されている「他社製オプション ROM の管理」の項目を選択します。 選択したあと、保存して終了します。そのタイミングで再起動します。

再起動して起動してくるタイミングで F3 キーを押してください。画面の左下に以下のように表示され、その後「他社製オプション ROM の設定」画面が表示されます。

F9 はブートセレクト画面、 F10 は BIOS 設定画面が表示されますが、 F3 キーを押すと「他社製オプション ROM の管理」画面が表示されます。これは裏技か? どこにも書かれてないぞぉー。

 
3. AMD DASH のネットワークと認証設定
「他社製オプション ROM の管理」画面にはいりました。青ベースの画面になりますね。

僕の場合はオンボードの Realtek の NIC と PCI-e x16 スロットに HP 純正の Intel の 2Port NIC のカードが入っているので MAC アドレスが 3 個見えますが、ここから Realtek の NIC の設定画面に入ります。Realtek は一番下の NIC ですね。

NIC を選択すると設定画面に突入。

右上には「AMD DASH の設定をしているよー。」って、表示されています。

ネットワークの設定については、まぁ、ややこすぃーのでとりあえず DHCP の設定をしてから抜けます。
個別の IP アドレスを指定しても良いと思いますし VLAN-ID を設定しても良いと思います。が、一番最初は勝手がわからないので DHCP でアドレスを取得するようにします。
この画面、良く見てみるとネットワークの設定するところが二ケ所あるんですよ。どっちが AMD DASH 用か良くわからない。なので、両方のネットワーク設定で DHCP の設定としました。

Realtek RealManage Setup のところで Setup and Configuration の中に入ると Security 関係の ID とパスワードが求められます。これには Administrator/Realtek で認証が通過します。

AMD MANAGEMENT CONSOLE からアクセスする際の認証に利用されます。 Administrator/Realtek は default 値です。

完了したら「他社製オプション ROM の設定」画面を抜けて再起動します。

 
4. しかし、実際の IP アドレスの割当は?
今回はデスクトップ機の HP ProDesk 405 G6 SFF/CT 側で AMD DASH を設定したので、こちらを利用します。 PC 上で動作している OS は FreeBSD/amd64 13.1-RELEASE です。

まず、自分のネットワークの網内に dhcpd を起動します。 FreeBSD 的ですが tail -f /var/db/dhcpd/dhcpd.leases して、 Realtek の NIC がどの IPv4 アドレスを取得するか確認します。

PC の電源を入れた段階でただちに IPv4 が取得されると思います。

『オンボードの Realtek の NIC は FreeBSD でも利用するのに AMD DASH で IPv4 アドレス取得して FreeBSD でも IPv4 使うの、無理じゃね?』

となるのであります。

その昔、HP DL320G5p 辺りに iLO とオンボード NIC が一緒のポートで VLAN で IP アドレスを使い分けろ。とかいうのがありました。その後、この仕様はなくなり iLO と OS が利用する NIC は別ポートなのが主流になりましたが・・。

「他社製オプション ROM の設定」画面で VLAN の設定もできるので、そこで PC セグメントと AMD DASH 用管理セグメントを分けた VLAN-ID を設定する。と、いうのも一つの手ではあります。

と、いうことで、この部分の IP アドレスの使い分けが非常にややこしい。自宅に Cisco 891FJ があるとはいえ・・。既に VLAN を利用して自宅のネットワークを構築しているとはいえ・・。

 
と、いうことでオンボードの re0 は AMD DASH 専用ポートに、PCI-e の 2Port NIC を FreeBSD 側で利用 (em0・em1 で認識している)することにします。

FreeBSD ではオンボードの Realtek の NIC は /boot/kernel/if_re.ko では動作しません。 ports から net/realtek-re-kmod をイントールした /boot/modules/if_re.ko を利用する必要があります。

 
PC に電源を入れて DHCP で取得した IP アドレスに ping を打ち続けるのですが、 FreeBSD が起動して re0 が認識した時点で ping が止まります。 AMD DASH と FreeBSD の IP アドレスがグチャグチャになるのでしょうなぁ。

それにしても AMD DASH 対応の NIC のために FreeBSD の標準 if_re.ko では動作しないのかな?
まぁ、FreeBSD は em0 を利用して通信するので re0 を認識させる必要さえありません。

 
ちなみに、自宅サーバ側の HP ProDesk 405 G8 SFF/CT は VMware ESXi 7.0 が動作していますが、ESXi7 はそもそも Realtek の NIC を認識しないので、こちらは問題なく AMD DASH で利用できますね。ただ、もう ESXi7 が起動している状態なので AMD DASH の設定してませんが・・f(^^;;。

 
オンボードの Realtek NIC の IP アドレスの設定について FreeBSD のみで動作確認したので WindowsOS ではどういう振る舞いをするのか確認さえしていません。もしかしたらドライバが優秀なのかもしれませんが、僕は見ようとも思ってません;-)。

と、いうことで AMD DASH 用に IPv4 アドレスが付いたでしょうか?

では次に進みましょう;-)。

 
5. AMC Console を起動
Windows にインストールした AMD MANAGEMENT CONSOLE を起動します。
一番最初にセットアップ画面が表示され、認証用 IP とパスワードを指定するように求められます。先程の default 値の Administrator/Realtek を指定します。
次に AMD DASH 対応 PC をネットワークから探査します。一番左にある “DISCOVER” と書かれたアイコンをクリックします。

  • hostname
  • IP Address
  • TCP/IP Range
  • Active Directory

 
上記で探査可能ですが、dhcpd のログを確認して IPv4 アドレスは解っているので素直に IP Address で探査します。

探査できるとこんな感じです。

 
6. AMC Console を使い込んで行こう
一旦認識されると All Systems というコンピュータグループに登録されるので、確認します。
探査された PC の状況や BIOS の情報を表示してくれます。色々見て楽しんでください;-)。

あとは AMC Console の上のアイコンにあるメニューを順に確認していく。と、いう感じでしょうか。機能的に色々試す。と、いう感じです。

 
僕的には右から 4 番目の “REMOTE ACCESS” がえらい気になったですが・・。 iLO5 だと HTML5 コンソールとか起動して、 PC の画面が表示できるのですか、『AMD DASH もできるのかっ!?』うひっ!! ・・。 まぁ、甘かったですね・・。orz

ちょっと使ってみたのですが、 BIOS 設定など表示できるのはうれしいです。が、その程度かなぁ・・。 iLO にはほど遠いみたいな雰囲気でしょうか。まぁ、CPU メーカがここまでよくやった。うんうん。

 
あ。ここまで書いて、思い出したっ!! AMD DASH は iLO の対抗ではなかったですね。 Intel の vPro 対抗の機能だったっ!! 失礼しましたっ!!

と、いうことで機能的には Intel vPro と同等なのかな?

 
興味がある方は色々試してみてください。

上にも書いた通り、ネットワーク設定が通過できると比較的容易に遊べるようになるかと思われます。

 
このエントリは AMC Console の利用方法について記載したものではなく、どこにもドキュメントが無い AMD DASH を利用する PC 側のネットワーク設定について書かれたモノなのであります。なので AMC Console の Linux CLI とか Windows GUI とか、そんなのはどうでも良いことなのでありますっ!! ;-P。

 
(参考にしたサイト: https://www.reddit.com/r/Amd/comments/ism4wg/trying_out_dash_remote_access_on_a_thinkpad_t14s/)
どこにもドキュメントが無いないわけではなかった・・。ほっ。

8月 282022
 

去年の 11 月にデスクトップ PC を新調しました。 CPU は AMD Ryzen7 PRO 4750G です。この環境において FreeBSD を起動 (当時は 13.0-RELEASE でしたが、今は 13.1-RELEASE が動作しています) しています。

素晴らしい CPUをチョイスしたので 8 Core/16 スレッドです。ports を make するとメモリが足りなくなって大変。みたいな・・。
この強力な CPU パワーを使い切るのは ports のコンパイル時しかないんかい?! になるのも悲しいので VirtualBox でもインストールして利用するべ。などと思っても、ちぃとも動作しない・・。

エラーとしてはこんな感じ。

文字列的には・・。

仮想マシン"WindowsServer2012_01"のセッションを開けませんでした。

VirtualBox can't enable the AMD-V extension. Please close all other virtualization programs. (VERR_SVM_IN_USE).

終了コード : NS_ERROR_FAILURE (0x80004005)
コンポーネント: ConsoleWrap
インターフェース: IConsole {872da645-4a9b-1727-bee2-5585105b9eed}

 
まぁ、OS は Windows Server でなくとも良いんですが、 Windows11 だったり FreeBSD なども上記エラーメッセージが出力されて起動しない・・。 orz
せっかくの 8 Core/16 スレッドな CPU なのに・・。

たまに VirtualBox を起動して『あ。やっぱり動かないね。』になるのよねぇ・・。
BIOS (UEFI) で AMD-V (AMD SVM) が有効になっていることは何回も確認している。

上記メッセージは日本語的には

「VirtualBox は AMD-V 拡張機能を有効にできません。 他のすべての仮想化プログラムを閉じてください。 (VERR_SVM_IN_USE)。」

らしいんですな。 Linux 方面では kvm と VirtualBox がケンカしていて仮想化資源を取り合っているんだそうで、VirtualBox を起動する際は kvm のカーネルモジュールを rmmod すれば良いらしい。

 
では、 FreeBSD は何が仮想化資源を掴んでいるのだぁ!? と、なるのですが、原因が全くわかりません・・。

cat /var/log/messages してみると・・。

vboxdrv: XXXXXXXXXXXXXXXX VMMR0.r0
vboxdrv: XXXXXXXXXXXXXXXX VBoxDDR0.r0
VMMR0InitVM: eflags=40246 fKernelFeatures=0x2 (SUPKERNELFEATURES_SMAP=1)

 
んー。見覚えのある文字列がありますが、これはなんなんざんしょ(?_?) と、いう状態です・・。

でもって、閃いた。試しに vmm.ko を kldunload してみた。

$ sudo kldunload vmm.ko
ivhd0: detached
amdiommu0: detached
pci0:  at device 0.2 (no driver attached)

 
man vmm してみると以下のように表示されますな。

NAME
vmm.ko – bhyve virtual machine monitor

DESCRIPTION
vmm.ko provides the kernel portion of the bhyve(4) hypervisor.

An Intel CPU with VT-x/EPT or AMD CPU with SVM support is required.

PCI device passthrough to a virtual machine requires hardware with VT-d support.

なるほどねぇ・・。こいつと競合していたのねぇ・・。と、いうことで、以降はすんなりと VirtualBox の仮想マシンが無事に起動したのでありました。

 
と、いうことで、VirtualBox が仮想化資源をつかめない。上記のようなメッセージが出力されている場合は、競合が発生しているので、とりあえず vmm.ko がロードされていないか確認すると良いと思います。

僕は AMD の CPU しか使ったことないけど、 Intel 系の CPU も vmm.ko は kldload できるのかな?

8月 212022
 

FreeBSD で Xorg を利用していた場合、USB のキーボード、マウスを一回抜き差しすると、設定がぜぇーんぶ飛んでしまいます。

例えば僕は USB 切り替え機器で FreeBSD 、macOS 、WindowsOS の間を一個のキーボードとマウスを利用しています。
FreeBSD から macOS に USB 切替器で切り替えると、 FreeBSD から見ると USB のキーボードとマウスは一旦切り離された状態 (devd 的に言うと detatch された状態) になります。
そして macOS から FreeBSD に戻るときに USB 切替器で切り替えると今度は attach された状態になります。

アタッチされたとき、最近の Xorg ではキーボード、マウスの設定が全部飛んでしまうんですな。以前は設定情報がとんでしまうなんてことは無かった。しかし、今は飛んでしまう。 Xorg のデバイス検知の仕掛けが libinput とか xinput 、 evdev 辺りになった影響なのかもしれないですな。

 
では、USB キーボード・マウスの、どんな設定が detatch -> attach で飛んでしまうのか?

キーボードの場合、 2 個前のエントリで書いた ${HOME}/.xmodmaprc の内容が消えてしまう。毎回 USB キーボードを attach する毎に xmodmap コマンドを打つ必要がある・・。orz

打つコマンドとしては以下のような感じ。

$ xmodmap ~/.xmodmaprc

 

マウスの場合、俗に『ナチュラルスクロール』などと言っていますが、回転方向を macOS みたいにする設定ですね。
KDE の場合「KDE システム設定」->「入力デバイス」->「マウス」から『スクロール方向を反転』のチェックをはずして [適用] を押したあと、チェックをつけて再度 [適用] を押すともとに戻ります。

が、GUIベースでこんなことしないで、CLI 的コマンドが何個か用意されています。

# libinput list-devices
<略>
Device:           MOSART Semi. 2.4G Keyboard Mouse, class 0/0, rev 1.10/1.03, addr 15
Kernel:           /dev/input/event7
Group:            8
Seat:             seat0, default
Capabilities:     pointer 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   button
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   flat *adaptive
Rotation:         n/a
<略>
$
$ xinput list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                    id=4    [slave  pointer  (2)]
⎜   ↳ System mouse                                  id=6    [slave  pointer  (2)]
⎜   ↳ Compx 2.4G Wireless Receiver                  id=11   [slave  pointer  (2)]
⎜   ↳ MOSART Semi. 2.4G Keyboard Mouse              id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                     id=5    [slave  keyboard (3)]
    ↳ System keyboard multiplexer                     id=7    [slave  keyboard (3)]
    ↳ Power Button                                    id=8    [slave  keyboard (3)]
    ↳ AT keyboard                                     id=9    [slave  keyboard (3)]
    ↳ Compx 2.4G Wireless Receiver                    id=10   [slave  keyboard (3)]
    ↳ MOSART Semi. 2.4G Keyboard Mouse                id=12   [slave  keyboard (3)]

 
今回やりたいことはマウスの逆回転をコマンドで設定したいということで、表示された内容を確認するには pointer をチェックします。すると “MOSART Semi. 2.4G Keyboard Mouse” と、いうマウスデバイスになります。

このマウスの回転方向を逆転するには以下のコマンドを利用します。

$ xinput list-props "pointer:MOSART Semi. 2.4G Keyboard Mouse"
<略>
$ xinput set-int-prop "pointer:MOSART Semi. 2.4G Keyboard Mouse" "libinput Natural Scrolling Enabled" 8 1

 
一行目のコマンドで対象となるマウスの内容を一旦表示してみました。二行目のコマンドでマウスの回転方向を逆にします。オプションの “libinput Natural Scrolling Enabled” 8 1 がそれになります。
前半部分はマウスのデバイス名になるので、マウスが変わるとデバイス名が変わります。

 
と、いうことで、ここまでが前ふり部分のお話です。

  • キーボードのキーマップを変えたいときはキーボードの attach 後に毎回 xmodmap コマンドを投入
  • マウスのホイールを逆回転にしたいときはマウスの attach 後に毎回 xinput コマンドを投入

 
detatch -> attach 後に毎回上記コマンドを打つとなると、それなりにイヤになりますね。
USB 機器の attach を検知して自動的にコマンドを実行してくれないものか・・。

そーいうときのために devd という機能がありましたっ!! 早速 /etc/devd/keybord.conf という設定ファイルを書いて devd を restart してみます。

notify 100 {
        match "system"          "USB";
        match "subsystem"       "DEVICE";
        match "type"            "ATTACH";
        match "vendor"          "0x25a7";
        match "product"         "0xfa70";
        action "/home/takachan/bin/KeybordOn.sh";
};

 
USB デバイスの vendor と product を usbconfig -d ugen0.5 show_ifdrv コマンドで拾ってきて設定します。 USB デバイスが attach されたときに action に記載されたスクリプトが実行されます。

なんか、無事に USB デバイスの検知はしているようですが、スクリプトの動いている感が全くありません。
なんでか、悩んだのですが、そもそも devd は root 権限で動作しております。それが一般ユーザの takachan のために Xorg のキーボードの設定やマウスの設定なんてしてくれるはずが無いのです。 $DISPLAY とかどうなっているのだ?! 的発想です。
まぁ、当たり前と言えば当たり前ですが・・。

ちなみに devd には /var/run/devd.seqpacket.pipe のいうのがあって、この pipe を一般ユーザ権限で動作するプログラムが受けると、一般ユーザ権限でイベントが受けられらしいですが、あまりドキュメントが無い・・。 devd-rs というのがヒントになります。

 
一般ユーザがもっと気軽に USB デバイスのイベントを拾えるようなものはないのか? 探してみると ports にあるようです。x11/inputplug になります。 コンパイル時には rust がいるかな? (大変だぁ・・)

inputplug は、例えば ~/.xsession に記載しておくことにより Xorg へのログイン時に一般ユーザ権限のデーモンとして起動します。起動後は xinput のイベントを拾うことができるようになります。

$ echo 'echo "$@"' > xishow; chmod 755 xishow
$ inputplug -d -c ./xishow

 
とりあえず xinput のイベントを拾って表示する xishow スクリプトを用意して inputplug を起動します。 -d はデーモンモードにならないオプションで -c はスクリプトを指定します。 -d を指定しないとバックグラウンドで動作してしまって、仮に情報が拾えていても tty に表示してくれないので、最初の試験中はほぼほぼつけていたほうが良いです。

上記の状態で USB 機器を detatch -> attach してイベントが拾えていれば OK。 あとはスクリプトの部分を作成していくことになります。
それにしてもこれで一般ユーザ権限でようやっと USB 機器のイベントが拾えるようになったぁ。ふぅ・・。

 
と、いうことで、僕が作成したスクリプトはこんな感じ。大急ぎの perl であまり美しくないですけどねぇ・・f(^^;;。

#!/usr/local/bin/perl

use strict;

my $pointer = "MOSART Semi. 2.4G Keyboard Mouse";
#my $pointer = "Telink Wireless Receiver";

my $cmd1 = "/usr/local/bin/xmodmap ${HOME}/.xmodmaprc";
my $cmd2 = "/usr/local/bin/xinput set-int-prop ";
$cmd2   .= "\"pointer:${pointer}\" ";
$cmd2   .= "\"libinput Natural Scrolling Enabled\" 8 1";
my $cmd3 = "loggder -t USB-keybord and mouse Ready.";   


my @opt = ();

for (my $c = 0;$c < 11; $c++) {
    push(@opt,shift);
}

my $f1 = 0;
my $f2 = 0;
my $f3 = 0;

foreach my $data (@opt) {
    $f1++ if ($data eq "XIDeviceEnabled");
    $f2++ if ($data eq "XISlaveKeyboard");
    $f3++ if ($data eq $pointer);
#    print "DEBUG: $f1 / $f2 / $f3 : $data" . "\n";
}

if ($f1 && $f2 && $f3) {

# デバイスを認識する前にコマンドを実行してまうので 5 秒ほどスリープ
    sleep 5;
    print "CMD1: " . $cmd1 . "\n";
    print "CMD2: " . $cmd2 . "\n";
    print "CMD3: " . $cmd3 . "\n";
    system("$cmd1");
    system("$cmd2");
    system("$cmd3");
}

exit 1;

 
これで、USB 機器接続後に xinput のイベントを拾ったあと、xmodmap と xinput set-int-prop のコマンドを実行してくれるようになりました。
やりたいことがようやっとできました。そこはかとなく長い道のりだったのであります。

が、今の時代、 FreeBSD でここまでがっつりと Xorg 使っている人、居るんかいな?
このエントリが無駄にならないことを切に願うのであります・・。

8月 112022
 

以前のエントリで「macOS で Wiondows キーボードを。」というのを書きました。このときは、かな刻印のない HHKB Lite2 の後釜どうしよう。的な記事で、安めの エレコムの TK-FCM103XBK を購入して、Windows・FreeBSD・macOS で利用。って、感じの記事でした。

あれからしばらくして、有線ではない、無線の TK-FDM105TXBK と、いうのも購入しました。エレコムのこれ系のキーボードは都合 3 個購入して色々なシーンで利用しようと思いました。

 
が、しょせんは HHKB Lite2 と一緒でナイロンの弾力でベコベコ打つ。みたいな感じです。『赤軸とか青軸と呼ばれるちょっと高価なキーボード使ってみたいなぁ。』とか思い探してみることにしました。

あんまり高いのは買えないので、まず、そこはかとなく安価な GAMDIAS の HERMES S1R というの購入してみました。

やじるしキーがついていて日本語配列、かな刻印あり。
あ。下のキーボードについてはあとで説明します;-)。

僕に必要な機能は一通り付いていました。キー配列などはエレコムの TK-FCM103XBK と一緒なので問題ありません。
それにしても個人的には初めてのゲーミングキーボード。ゲーミングキーボードって、どうしてキーの根元が丸見えなんでしょうかねぇ?不思議です。僕は PC でゲームをやらないので良くわからないのですが、左側の Windows キーはジャマなんでしょうかねぇ?

キーを押したときに色が光るのはまぁ、よしとします。自分で色々なパターンや明るさを設定できるのも良い感じでしょうか。

 
赤軸なのでキーを押したときの感覚がなかなか良い感じです。そして打刻音もベコベコとした雰囲気が良い感じです。

これをしばらく使い続けていたのでありました。

 
そんな状況の中で『60% キーボード』という言葉を耳にしました。フルサイズのキーボードの 60% 程度の大きさで、サイズ的には HHKB くらいのサイズです。

へー。

とか、思いネットを色々さまよってみました。そしたら、WENRUI メカニカルキーボード 日本語配列 キーボードというのが目に止まりました。

日本語配列、かな刻印あり、有線 USB 接続、無線 USB 接続、Bluetooth での接続もできて、バッテリー搭載。と、いうもういたせりつくせりな感じ。

『無線 USB 接続』というのは FreeBSD では必須です。FreeBSD の Bluetooth はアテになりませんしね。USB 有線よりは無線のほうが良いという雰囲気。

このキーボードが 6,000yen を切る価格で販売されていたので購入してみました。

上が HHKB Lite2 で、下が今回購入した WENRUI メカニカルキーボード 日本語配列 キーボードです。

 
一点気になったのが、物理的な『矢印』キーが付いていない点でしょうか。
Fn キーを押しながら『め』『かな』『変換』『Menu』キーを同時押しすると『矢印』キーとして動作する。と、いう状態です。

物理的な問題としては他に、スペースバーの左側に『無変換』キーがありません。『Alt』キーと一緒になっています。macOSの場合、日本語オフ (裏を返すと英語入力のオンか) する場合 Fn との同時押しが必要かも。

『Esc』 キーは Fn キーを押さない場合は『全角/半角』キーになります。 Fn キーと同時押しで『Esc』キーが機能するとなると Emacs 使いには非常に厳しい・・。

機能的には他に Shift + → + Fn が動作しません。

僕の場合、仮想デスクトップを利用するときに、デスクトップを切り替えるのに Ctrl + 『矢印』キーを利用しているのですが、このキーボードは『矢印』キーがないので Fn を同時押しする必要があります。

KDE5 の konsole とか、タブのついているアプリのタブ切り替えは Shift + 『矢印』キー だったのですが、Shift + → + Fn が動作しないため Shift + ← + Fn を押してグルッと反対方向に一周させる必要があります。

Shift + → はキーが別のに取られているようで、どうしようもない。と、いうのが現状のようです。

 
では実際に色々な OS で正しく動作するように設定を入れてみました。

WindowsOS では『Esc』 キーを Fn との同時押しにしないようにするために Microsoft PowerToys をインストールしてキー設定しました。

VK244 が『Esc』 キーを Fn との同時押しにしないようにするための設定。
Apps/Menuの設定が Shift + → + Fn を有効にする設定。

 
macOS では以前も解説した(上記リンクを参照してください)ことのある Karabiner-Elements で設定しました。『無変換』キーも無いので日本語オン・オフは『変換』キーと『かな』キーに割り当てました。当然 Shift + → + Fn を有効にする設定も追加しました。

application はShift + → + Fn を有効にする設定です。
grrave_accent_and_tilde(`) の設定が『Esc』キーのみで Esc が動作する設定。
スペースバーの右側 2 つのキーを英数字オン・漢字オンに割り当てました。

 
FreeBSD の場合、僕は KDE5 を利用しているので「KDE システム設定」の「キーボード」→[詳細] タブでそれらしいのをチョイスしして『全角/半角』キーと『Esc』キーを入れ替えました。

昔の X の設定は ${HOME}/.xmodmaprc とかに色々書いたりしていましたが、今は、KDE5 を使うのであればそちらの設定に任せてしまったほうが楽ちんですね。

が、上に書いた Shift + → + Fn が機能しない件ですが、こちらは ${HOME}/.xmodmaprc で解決しました。必要ない。って言ったのに、やっぱり書いてみました・・;-P。
Shift + → + Fn は keycode 147 なので、これを Right の keycode 114 に変更します。 (xev で確認できるよー;-)
『Esc』は keycode 9 なので 49 を 9 に変更します。

! shift + -> 
keycode 147 = Right Right Right 

! Zenkaku_Hankaku -> Escape
keycode 49 = Escape Escape Escape

 
と、いうことで必要な設定は OS ごとに準備完了。あとはベコベコうち続け、経験値を積んていくだけです。

このエントリも WENRUI メカニカルキーボード 日本語配列 キーボードで打っています。『矢印』キーは Fn キーと同時押しなので、ちとめんどう。Emacs のカーソル移動ショートカットで回避 (C-n C-p C-f C-b) すると、やじるしキーの出番は少なくなりそうですね。
Windows でも xkeymacs 利用しているし macOS はそもそも emacs キーバインドなので、良い感じです。

 
テレワークで家で仕事する機会が多いので、文字入力環境を考えていたら、なんか、ずいぶんとキーボードが溜まってきたような気がしますf(^^;;。

自分にあったものを色々と見つけてみたいと思います。が、キーボードはさすがにしばらくもー良いかな。

1月 292022
 

ちょっと前に「HP ProDesk 405 G6 SFF/CT 購入。」と、いうエントリを書きました。ことのときから 13.0-STABLE を利用するようになりました。

ただし、CURRENT とか STABLE というのはある意味ナマモノであり『ちゃんと動作するタイミング』というのがあるので、一旦、正常動作しているソースツリーにぶち当たるとそれをずっと使い続ける。と、言う状態だったのですが、最近、風の噂で Intel Wi-Fi 6 AX200 がどうやら動作するようになって来た。と、言う話題が出ていたので、いよいよ試してみようか。と・・。
上のエントリの中でも試しているのですが、このときは見事に玉砕していたのですけどもね。

 
と、いうことで git で STABLE の /usr/src のソースコードをどうやって持ってくるのか、ちっとも解らない。ググッても、ちっとも解らない・・。orz

http://ftp.iij.ad.jp/pub/FreeBSD/snapshots/amd64/13.0-STABLE/

とりあえず、ここにアクセスしてみた。なるほどー。snapshot なので定期的に更新されているようですね。ここから src.txz の たー玉をゲット。 /usr/src に展開したあと make buildworld 系おまじないをかけて、そこはかとなく新しい /usr/src/sys/contrib/dev/iwlwifi/ が存在していて if_iwlwifi.ko カーネルモジュールがインストールされる環境が整ったのでありました。

 
さてと、ここからは実際に kldload if_iwlwifi.ko して利用してみましょう。あ、今回は ThinkPad X13 で試しました。こいつには Intel AX200 が付いているしいよいよいもって使ってみたいのでね。

参考になるのは以下の URL です。

https://wiki.freebsd.org/WiFi/Iwlwifi

と、いうか、今のところ、ここしかない感じ。あと、freebsd-wireless な ML のスレッドを追いかけるしかないです。

https://lists.freebsd.org/archives/freebsd-wireless/

 
まずはじめに /boot/loader.conf に if_iwlwifi_load=”YES” を書くところから始めるのですが、これ書くと以下のエラーがドドドと表示されて iwlwifi のファームウェアが正しくロードできないようです。

<略>
kernel: iwlwifi0: could not load firmware image 'iwlwifi-cc-a0-57.ucode'
kernel: iwlwifi0: File size way too small!
kernel: iwlwifi0: could not load firmware image 'iwlwifi-cc-a0-56.ucode'
kernel: iwlwifi0: File size way too small!
<略>

 
なんか、調べてみると、上記の現象は /boot/loader.conf から if_iwlwifi.ko を kldload した場合、ファームウェアが格納されるメモリが無くなってしまって正しいサイズのファームウェアがロードできない状態らしい。なので /etc/rc.conf に書いたほうが良い。とのことでした。

こんな感じ。

kld_list="amdgpu.ko if_iwlwifi.ko"

 
僕のは Renoir なマシンなので、amdgpu.ko と一緒にロードさせてあげます。で、再起動すると、今度は無事に動作しそうな雰囲気です。とりあえずは pciconf -lv で確認してみましょう。

iwlwifi0@pci0:2:0:0:    class=0x028000 rev=0x1a hdr=0x00 vendor=0x8086 device=0x2723 subvendor=0x8086 subdevice=0x0080
    vendor     = 'Intel Corporation'
    device     = 'Wi-Fi 6 AX200'
    class      = network

 
Wi-Fi 6 AX200 に違うドライバ、例えば iwm0 などが割り当てられていた場合、 WiFi/Iwlwifi にも書いてあったとおり

# devctl detach pci0:2:0:0
# devctl set driver pci0:2:0:0 iwlwifi

 
してみて、ちゃんと iwlwifi0が割り当てられることを確認しましょう。無事に割り当てることができたら第一関門突破です;-)。

 
さてと。無事に認識したようなので、次に /etc/rc.conf に設定を書きます。僕の場合はこかん感じで。

wlans_iwlwifi0="wlan1"
create_args_wlan1="wlanmode sta regdomain JAPAN country JP"
#wlandebug_wlan1="+state +crypto +node +auth +assoc +dot1xsm +wpa"
ifconfig_wlan1="WPA DHCP ssid AP-Point mode 11ac country JP"

 
しかし、全く起動時に反応してくれない。しょーがないので起動時の利用は諦めるしか無い雰囲気・・。

一応、有効化するためのスクリプトと、いうかコマンドを並べてみました。

#!/bin/sh

#devctl set driver pci0:2:0:0 iwlwifi0

ifconfig wlan1 create wlandev iwlwifi0
ifconfig wlan1 mode 11ac country JP
ifconfig wlan1 ssid AP-Point bssid 90:17:c8:ff:ff:ff
ifconfig wlan1 up
ifconfig wlan1 scan
ifconfig wlan1 WPA
ifconfig wlan1 DHCP
/usr/sbin/wpa_supplicant -s -B -i wlan1 -c /etc/wpa_supplicant.conf -D bsd -P /var/run/wpa_supplicant/wlan1.pid

 
上のコマンドを順番に打っていくと・・。

# ifconfig wlan1 mode 11ac country JP
ifconfig: SIOCSIFMEDIA (media): Device not configured
# ifconfig wlan1 WPA
ifconfig: WPA: bad value
# ifconfig wlan1 DHCP
ifconfig: DHCP: bad value

 
mode 11ac を受け付けてくれず、他に WPA と DHCP オプションが機能してくれないようです・・。orz。

一応確認してみると、

# ifconfig wlan1
wlan1: flags=8843 metric 0 mtu 1500
        ether a8:7e:ea:ff:ff:ff
        inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255
        groups: wlan
        ssid AP-Point channel 36 (5180 MHz 11a) bssid 90:17:c8:ff:ff:ff
        regdomain JAPAN country JP authmode WPA2/802.11i privacy ON
        deftxkey UNDEF AES-CCM 3:128-bit txpower 23 bmiss 7 mcastrate 6
        mgmtrate 6 scanvalid 60 wme roaming MANUAL
        parent interface: iwlwifi0
        media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11a
        status: associated
        nd6 options=29

 
802.11ac で接続してもらって、速さを体験したいのに、なんで 11a でしか接続しないのだろう・・。ちなみに ifconfig は ssid の他に bssid も合わせて指定していて 802.11g ではない 5GHz 帯の AP に接続するように調整しています。ヘタるすと 802.11n とか 802.11g に(『で』が正解か?)接続してしまう場合もあります。

この状態でスピードサイトにアクセスして計測してみると、ダウンロードで 20Mbps 下回る程度、アップロードでも 10Mbps 程度の速度しか出ません。

あれあれ? iwlwifi0 って 802.11ac と ax に対応しているんじゃないの? どうしてこんな遅いの!? ちょっとガクゼンとしてしまいました・・。 orz

 
このブログでは今までもう何回も FreeBSD で動作する WiFi USB ドングルについて記載してきました。

FreeBSD 12.0-RELEASE から if_rtwn が利用可能ななった。」など。

REALTEK の RTL88 系チップは 802.11ac に対応していて、ドライバは rtwn0 を利用するとこにより 5GHz 帯に接続できるぜぃ。みたいな感じで AX200 が利用できない状態においては非常に効果的に機能する WiFi ドングルでした。最近の FreeBSD 12.2-RELEASE 以降では問題なく利用できる状態。

ただ、こちらもやはり 20Mbps 程度と、FreeBSD で利用すると速度が出ていなかった・・。なので、 802.11ac に対応した iwlwifi0 で『Windows 並にバリバリ速度でるのかな? ワクワクっ!!』などと期待感大だったのに、ちょっと裏切られた感じ・・。

 
今まで USB ドングル利用していた WiFi はオンボードのチップが使えるようになって、 USB ポートが一個空いたねぇ。な感じ。速度的には変わらないし、 /etc/rc.conf に記載した内容が起動時に反映されないし・・。

13.1-RELEASE ではもう少しマトモになるかもしれないけど、速度的には望めないとなると、悲しい部分が・・。orz
と、いうことで /etc/rc.conf に記載してブート時に利用可能になるまで、もうすこし rtwn0 を利用し続けるかなぁ・・。

11月 202021
 

新しくデスクトップ PC を購入しました。『AMD FX おじさん』ではないですが、今まで利用していた PRIMERGY MX130 S2 は 2012 年に購入したのですなぁ。約 10 年使っていた。と、いうことか・・。速度的に『遅いっ!!』とは思ってなかったのでずっと使い続けていましたが・・。

今は半導体不足なときで、PC も決して安くはない。 AMD Ryzen7 PRO 4750G / Memory 16GB / 512GB SSD で 85,000yen 程度。納期は約一週間でした。

写真的には外側よりも内部のほうが嬉しいですよね。多分;-)。

HP ProDesk 405 G6 SFF/CT を買う前に一旦 Lenovo の ThinkCentre M75t Tower Gen2 を注文したんだけど、納期が約半年先、来年の 3 月になる。とのことだったので、待ってられないのでキャンセルした。ということがあるのであります。
HP は昔の日本 DEC の工場を持っているので納期が早いのねぇ。と、いう感じがします。

default の OS は Windows10 home でした。まだ Windows11 にはしていません。それよりも先に、すかさず FreeBSD のインストールを開始するのであります。

 
がっ!!驚きーっ!!よく調べずに今回の PC を買ったのですが、なんとっ!! FreeBSD/amd64 13.0-RELEASE がインストールできないのです。インストール用 USB メモリを Rufus で書き込みブートさせるのですが —<<BOOT>>— が出る前でフリーズしてしまうのでありました。『あらら? もしかしてハズレな PC 買ってしまったか?』 などと調べ始めると・・。

ほおほお。 HP の デスクトップ PC や NotePC では 13.0-RELEASE 以前のバージョンではブートできないパターンがあるのねぇ。

https://forums.freebsd.org/threads/freebsd-on-hp-prodesk-g6.79252/

こちらのスレッドがまさしくビンゴ。 HP の PC は本当に悩みモノらしい。下まで読み進むと 14-CURRENT ではブートするようになったみたいなので、試してみたら確かにブートしてインストールできた。ホっ。
で、更に追加で 13.0-STABLE でも試してみたらこちらも無事にブートしたのでありました。ふぅ。

上記 URL のネタは 6 月には CURRENT 用の修正版が出たみたいだし STABLE に降りてくるのにはそんなに時間がかからないと思うので、今の 11 月辺りでは 13.0-STABLE でも OK 。と、いう感じなのでしょうねぇ。
と、いうことで今回インストールしたのは FreeBSD-13.0-STABLE-amd64-20211111-7647baa1e8f-248036-bootonly.iso になります。 2021/11/11 分の STABLE ですね。

一個前のエントリで書いていますが 13.0-RELEASE と同様に Windows の EFI パーティションをつぶすこともなく、インストールが完了しました。
Lenovo の PC と違い BitLocker を気にする必要がなく、素直にセキュアブートをオフにするだけでインストールすることができたのであります。

 
デバイス的なことを書きましょう。手元に Intel AX200 の代わりに購入した Intel Wireless-AC 9260 があったので、それを設置しました。 NotePC 用に買ったのでアンテナが無かったのですが Amazon で 760yen で追加購入。ただのケーブルが二本だけど、Wi-Fi モジュールに接続できる必要があるので、しっかりと選択する必要があります。長さはだいたい 30cm ほどかなぁ。ケース内にケーブルを這わせたあと、 FreeBSD で利用すると 20Mbps 程度、Windows で利用すると 200Mbps 程度出ます(自宅で可動しているスピード計測サイトでの計測;-)。

他に S-ATA 接続の Samsung SSD 870 QVO 1TB SVQ01B6Q も設置。 M2.2280 な SSD と合わせて 1.5GByte の容量を確保できました。

 
FreeBSD の pciconf -lv で特筆すべきデバイスをちょっと並べてみます。

none0@pci0:4:0:0:       class=0xff0000 rev=0x1a hdr=0x00 vendor=0x10ec device=0x816e subvendor=0x10ec subdevice=0x8168
    vendor     = 'Realtek Semiconductor Co., Ltd.'
    device     = 'Realtek RealManage BMC'
re0@pci0:4:0:1: class=0x020000 rev=0x29 hdr=0x00 vendor=0x10ec device=0x8168 subvendor=0x103c subdevice=0x872d
    vendor     = 'Realtek Semiconductor Co., Ltd.'
    device     = 'RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller'
    class      = network
    subclass   = ethernet
none1@pci0:4:0:2:       class=0x070002 rev=0x1a hdr=0x00 vendor=0x10ec device=0x816a subvendor=0x10ec subdevice=0x8168
    vendor     = 'Realtek Semiconductor Co., Ltd.'
    device     = 'RTL8111xP UART'
    class      = simple comms
    subclass   = UART
none2@pci0:4:0:7:       class=0x0c0701 rev=0x1a hdr=0x00 vendor=0x10ec device=0x816c subvendor=0x10ec subdevice=0x8168
    vendor     = 'Realtek Semiconductor Co., Ltd.'
    device     = 'RTL8111xP IPMI interface'
    class      = serial bus
    subclass   = IPMI
iwm0@pci0:5:0:0:        class=0x028000 rev=0x29 hdr=0x00 vendor=0x8086 device=0x2526 subvendor=0x8086 subdevice=0x0014
    vendor     = 'Intel Corporation'
    device     = 'Wireless-AC 9260'
    class      = network

 
HP の法人向け PC なので Intel でいうことろの vPro みたいなのを積んでいるようですが、 AMD の CPU 搭載なので Intel チップはちと無理か。そのかわりに Realtek のリモート管理系チップが搭載されているようです。俗に『AMD DASH』と呼ばれているヤツかな? BIOS (UEFI) の設定メニューにオン/オフのオプションがありました。

が、当然 FreeBSD では認識されません。

iwm0 はあとから自分が取り付けたモノになります。 BIOS (UEFI) 的にもフツーに認識されているし Bluetooth も BIOS で認識しているので問題ないですね。
下の写真では、一番上の真ん中にあるある出っ張ったパーツです。アンテナが伸びているのは一枚目の写真でも解るでしょうか?

せっかく 13.0-STABLE にしたし Intel Wireless-AC 9260 もついたので、Iwlwifi を試してみるかねぇ。みたいな状態で https://wiki.freebsd.org/WiFi/Iwlwifi を試してみましたが・・。
https://people.freebsd.org/~bz/wireless/apply-wireless-latest.sh これはもうコードが古くてコンパイルも通らないですね・・。orz 20210904 のカーネルソースコードだと linuxkpi のコードにもずいぶんと改修が進んでいるだろうに・・。
と、いうことで FreeBSD での 802.11ac はまだ待ちの状態です。

 
Realtek の NIC は re0 で認識されてはいますが /boot/kernel/if_re.ko では認識できないチップです。最新のチップかな? 最初『え゛。Realtek のチップ認識しないの?』と、驚いたのですが、今の世の中 ports からインストールするとか。 ports の net/realtek-re-kmod/ をインストールすると /boot/modules/if_re.ko が入ります。これを利用すると re0 で認識できます。
/boot/loader.conf はこんな感じで。

if_re_load="YES"
if_re_name="/boot/modules/if_re.ko"
hw.re.max_rx_mbuf_sz="2048"

 
あと、今回の PC は CPU が AMD Ryzen7 PRO 4750G なので GPU は Renoir です。これは ThinkPad X13 と一緒。 ports の graphics/drm-devel-kmod/ では X が起動しませんでした。
せっかく 13.0-STABLE を利用しているので linuxkpi 系は最新のソースコードがはいっているはず。と、いうことで GitHub から drm-kmod-master の最新版を取ってきました。今だと drm-kmod-5.7 になります。これをインストールしたらあーたっ!!

X はバリバリ動作する。

$ xrandr 
Screen 0: minimum 320 x 200, current 2560 x 1440, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
DisplayPort-2 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
   2560x1440     59.95*+  60.00  
   2048x1152     60.00  
   1920x1200     59.88  
   1920x1080     60.00    60.00    59.94    30.00    24.00    29.97    23.98  
   1600x1200     59.95  
   1680x1050     59.95  
   1600x900      60.00  
   1280x1024     60.02  
   1440x900      59.95  
   1280x800      59.95  
   1280x720      60.00    59.94  
   1024x768      60.00  
   800x600       60.32  
   720x480       60.00    59.94  
   640x480       60.00    59.94  

 
スゲースゲー。 ThinkPad X13 では 13.0-RELEASE と drm-kmod-5.5-wip でやっとこさ X を動かしたんだけど、 AC アダプタ抜くとカーネルパニックとかしていてまだまだだなぁ。と思っていたんだけどそんなこともなく。

あと、デスクトップ PC で 13.0-STABLE + drm-kmod-master (5.7) を利用すると suspend/resume できますっ!! デスクトップ PC で suspend/resume っ!! resume 後に X が死ぬ。と、いうこともなく本当に無事に、 WindowsOS のようにフツーに動作します。かなり感動的っ!!

 
今回、HP ProDesk 405 G6 SFF/CT にイントールしたあと、すかさず ThinkPad X13 も同じ構成にしてみたんだけど、上にも書いた通り AC アダプタ抜いてもカーネルパニックせず、 X は無事に動作するし suspend/resume も完璧に動作する。嬉しいっ!!

 
PC の技術はどんどん進化しているんだけど UEFI+CSM 時代は 10.1-RELEASE が一番良いと思っていた (suspend/resume していた)。そして、 UEFI 時代の FreeBSD は今度でる 13.1-RELEASE が最適なバージョンになるでしょうなぁ。今回利用した 13.0-STABLE の出来の良さに驚いたのでありました。

もし、手元に UEFI のみで動作するバリバリ最新の PC があるのであれば、是非とも FreeBSD をインストールしてみて頂きたいものであります。

いやぁ。今回は「イバラの道」というのは 13.0-RELEASE インストールでフリーズする以外、13.0-STABLE をチョイスして drm-kmod-master をインストールしたらスルっと、なんの苦労もなく動作したので、幸せな日々が送れて嬉しいのであります;-)。

このネタ、もう完結してしまって、続きませんf(^^;。

11月 102021
 

過去に何回か ThinkPadE145 や ThinkPad X13 に FreeBSD をインストールしているネタとか書いているのですが、 12.2-RELEASE の頃は Windows の UEFI を boot1.efifat が上書きしてしまい、Windows がブートしなくなってしまう。と、書いています。なので、FreeBSD インストール時には FreeBSD 専用の EFI パーティションを切ってあげると FreeBSD はそこを利用することになるので Windows が無事に動作して、マルチブートが可能な状態になるんですね。

しかし、まぁ、FreeBSD/adm64 13.0-RELEASE からは Windows の EFI パーティションの中に bootx64.efi を書き込んでブート情報を Windows と同列に設定してくれるようになりました。
Windows 側で mountvol して以下のオペレーションをする必要がなくなりました。

C:\Windows\system32> mountvol
C:\Windows\system32> mountvol z: /S
C:\Windows\system32> z:\
z:\> mkdir EFI\FreeBSD\Boot 
z:\> cd EFI\FreeBSD\Boot 
z:\> copy c:\boot1.efi ./bootx64.efi
z:\> dir
z:\> c:\
C:\Windows\system32> exit

 
この部分を bsdinstall がやってくれるようになりました。なので、うも、なんの遠慮もなく、何回でも FreeBSD のインストールが可能になりました。嬉しいことですね。

ただ、一点。「Firmware Windows Boot Manager」に対しては bcdedit /set {fwbootmgr} displayorder {UUID} /addfirst するようで、 FreeBSD の起動が一番上に来ます。 PC を再起動すると FreeBSD がブートするので『あらら? Windows パーティション飛ばしてしまったか?』となりますが、PC の BIOS (UEFI) のブートの順番画面で変えてあげると Windows が無事にブートします。
なので、いつもブートする OS を Windows か FreeBSD どちらにするかの選択が容易にできるようになります。

さぁ、皆さんもドドドと、 PC に FreeBSD をインストールしてみましょうっ!!

 
と、いうことで今回のエントリはこれで終了。次回のエントリは 13.0-STABLE について書いてみます;-)。

10月 222021
 

以前のエントリで、FreeBSD の VRF (setfib) は正しく使えない。と、書いたことがありました。エントリ的には「FreeBSD でポリシールーティング。」と、いうヤツですね。

setfib 0 の中に setfib 1 のルーティング情報が載ってしまい、ルーティングテーブルがインターフェースと結びついていない。と、いうのが問題点だ。と、書いています。

しかし、設定の詳しい人に聞いてみるとちゃんとそーいう設定ができるらしいんですね。ちょっと、今更感満載なんですけども・・f(^^;;。
/etc/rc.conf に以下のように書くと良いみたいです。

#defaultrouter="192.168.22.1"
#ipv6_defaultrouter="2001:470:fe36:beef::1"

static_routes="0:vmx0 1:em0"
route_0="-net -inet default -gateway 192.168.22.1 -fib 0"
route_1="-net -inet default -gateway 192.168.1.1  -fib 1"

ipv6_static_routes="0:vmx0 1:em0"
ipv6_route_0="-net -inet6 default -gateway 2001:470:fe36:beef::1  -fib 0"
ipv6_route_1="-net -inet6 default -gateway 3ffe:6580:aa40::ffff:1 -fib 1"

ifconfig_vmx0="inet 192.168.22.20 netmask 255.255.255.0 fib 0"
ifconfig_em0="inet 192.168.1.20   netmask 255.255.255.0 fib 1"

ifconfig_vmx0_ipv6="inet6 2001:470:fe36:beef::20:1 prefixlen 64"
ifconfig_em0_ipv6="inet6 3ffe:6580:aa40::20:1      prefixlen 64"

 
defaultrouter の設定は必要ありません。
static_routes= と、 setfib が IPv6 対応になったので ipv6_static_routes= の二つのオプションがインターフェース名と setfib 番号を紐つけてくれます。そして、route_?= で default gateway を指定してあげれば良い。

この設定で起動したときのネットワークテーブルは以下の通り。

$ setfib 0 netstat -nr -f inet
Routing tables (fib: 0)
Destination        Gateway            Flags     Netif Expire
default            192.168.22.1       UGS         vmx0
127.0.0.1          link#1             UH          lo0
192.168.22.0/24    link#2             U           vmx0
192.168.22.20      link#3             UHS         lo0

$ setfib 1 netstat -nr -f inet
Routing tables (fib: 1)
Destination        Gateway            Flags     Netif Expire
default            192.168.1.1        UGS         em0
127.0.0.1          link#1             UH          lo0
192.168.1.0/24     link#2             U           em0
192.168.1.20       link#3             UHS         lo0

 
良い感じですねぇ。これで 192.168.1.30 辺りの PC から ping を打つと em0 から入ってきて、em0 から抜けていきます。良かったですねぇ。

 
しかし、問題なのは上記の設定を施したサーバ側です。

なんか、僕は思いっきり勘違いしていたか安直に考えすぎていました。 setfib した PC はなんでもかんでも setfib 0 側から出て行ってしまいます。これは想定していなかった・・。

em0 側に 192.168.1.0/24 が付いているのに、とある PC に対して ping 192.168.1.30 すると setfib 0 側、つまり、vmx0 側から出ていきます。
192.168.1.30 側では 192.168.22.20 に返すんだけど、返ってきていないことになっていて、到達性がない状態・・。orz

setfib を利用した VRF でルーティングテーブルが二つに分かれるのは良いんだけど、コネクテッドな IP アドレスに対するアクセスは setfib 0 のルーティングテーブルに関係なく、コネクテッドなインターフェースからパケットが出て行ってほしかった・・。

と、いうか、出ていくモノだと、思っていた。ここが、考えが甘かった点です・・。orz
うーむ・・。世間一般の VRF って、こーいう仕様なのか?

sysctl でコネクテッドな IP アドレスの場合はコネクテッドなインターフェースからパケットが出ていく。と、いうオプションはないものかのぉ・・。orz

 
この仕様のおかげで色々なものが動作しない・・。今悩んでいるのは MRTG。
ウェブ UI は setfib 0 を向いているんだけど、MRTG で情報を取得したいのは em0 なコネクテッドな IP アドレスを持つ宛先。 em0 側はそもそも LAN-ZONE でメンテナンスインターフェースという想定だしねぇ・・。

setfib 1 snmpwalk -v2c -c ICMPv6 192.168.1.30 system

 
これは動くんだけど、 MRTG.cfg に 192.168.1.30 にアクセスする設定を書いた mrtg を動作させようとしても動かない・・。

setfib 1 /usr/local/bin/mrtg /pathto/MRTG.cfg

 
mrtg は setfib 1 を無視して setfib 0 側から出ていくようです。まぁ、perl の内部構造に対して setfib 1 を食わせてあげないとどうしようもない状態かな。

似たようなのに httpd と MySQL の関係もありますな。 httpd は vmx0 側に開いているのは良いことで、別のサーバのコネクテッドな IP アドレスを持つ mysqld へのアクセスは em0 側で行いたい。だけど setfib 0 側から mysqld へのアクセスが出ていくのでこれはアクセスできんぞぉ・・

ansible も動かなくなった・・。AWX と ansible-playbook の関係も似たようなもん。もう、ヒサンすぎる・・。 orz

NFS マウントも /etc/fstab 内ではできなくて、 /etc/rc.clocal 内で setfib 1 mount_nfs -o tcp -o rw hoge と記載すると良いよ。なんてのが、どこかのフォーラムに書かれていたなぁ。 /etc/fstab が setfib に対応していない。

 
と、いうことでやっぱり FreeBSD の VRF は利用するのをやめる予感。

今のように出ていくパケット (established なパケット。と、いう意味かな) は何でもかんでも setfib 0 から出ていく。と、いうのとは別に、コネクテッドな IP アドレスの場合はコネクテッドなインターフェースからパケットが出ていく。と、いうオプションを用意してくれても良いと思うのだけどなぁ・・。

やっぱり pf のポリシールーティングに戻るかねぇ・・。

 
と、いうか、最後に書くんだけど、ネットワーク構成がまちがっている。と、いうことかな。

  • setfib 0 : em0 : サービス提供用ネットワーク
  • setfib 0 : em1 : バックヤード用ネットワーク
  • setfib 1 : em2 : ssh でのメンテナンス専用ネットワーク

 
FreeBSD で setfib な VRF を利用するにはこのように三つのネットワークが必要で「バックヤード用ネットワーク」は MRTG とか snmp、MySQL へのアクセス、と、いう感じでその目的をにして、「ssh でのメンテナンス専用ネットワーク」はリモート管理用に setfib をわけてあげる。と、いう感じですかねぇ。

7月 292021
 

前回のエントリでは Let’s Note CF-SZ5 の中古を購入して FreeBSD/amd64 13.0-RELEASE をインストールしました。そして、無事に動作して、なんちゃってな suspend/resume が動作しているところまで書いています。

 
さて、suspend/resume ですが、ports-CURRENT を追いかけていると、以下をインストールした辺りで正常に suspend/resume が動作するようになります。

  • drm-fbsd13-kmod-5.4.92.g20210720_1
  • mesa-dri-21.1.5
  • mesa-libs-21.1.5

もう、 /etc/rc.resume の中に色々書く必要ないです。

/etc/sysctl.conf に、以下の設定を記載すると、フタの開け閉めで suspend/resume ができるようになります。

# suspend/resume
#hw.acpi.lid_switch_state=NONE
hw.acpi.lid_switch_state=S3
hw.pci.do_power_suspend=0
hw.acpi.lid_switch_state=S3
hw.acpi.power_button_state=S5

 
すごいことですねぇ。 NotePC でバリバリ利用可能な FreeBSD の完成です;-)。

 
と、いうことで、ここからが本題。

以前のエントリでは Let’s Note のクルクル回すタッチパットでスクロールできない。と、書いていましたが、こちらも問題解決できたので、追加でエントリ書いてみたいと思います。

 
インターネット上で色々探してみると古い FreeBSD のバージョンでは特に気にすることなく動作していたみたいですが、12 系リリースの辺りからクルクルホイールさせるためには色々とワザが必要なって来たようです。

まず、カーネルがブートしたときの psm の状況を見てみましょう。
あ、このとき、/boot/loader.conf には以下のように設定してあります。

# psm/sysmouse
hw.psm.synaptics_support=1
hw.psm.trackpoint_support=1
#hw.psm.elantech_support=1

 
hw.psm.synaptics_support=1 が記載してあります。

それでもブート時には以下のように表示されます。

$ dmesg | grep psm
psm0:  flags 0x1000 irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
WARNING: Device "psm" is Giant locked and may be deleted before FreeBSD 14.0.
psm0: model Generic PS/2 mouse, device ID 0

 
このようになっていた場合、どう xorg の synaptics 設定を書いてもクルクルホイールできません。ただのタッチパッドの動作になります。この状態では、とあるおまじないをする必要があります。

おまじないが有効化されるとこのようになります。

$ dmesg | grep psm
psm0:  flags 0x6000 irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
WARNING: Device "psm" is Giant locked and may be deleted before FreeBSD 14.0.
psm0: model Synaptics Touchpad, device ID 0

 
一番最後が model Generic PS/2 mouse か model Synaptics Touchpad の違いです。

ではどのようにすると model Synaptics Touchpad になるのか?

ソースコードをいじる必要があるんですねぇ・・。
いやぁ、ようやっと、ネタを見つけた。と、いうか・・。

https://github.com/wulf7/iichid/issues/53

pciconf -lv したときに ichsmb0 があると良いのですが・・。 kldstat で ichsmb.ko がロードされているか確認してみてください。

さて、上記 URL を確認してみると、タッチパッドが SMBus 経由で動作するかもしれん。と、いうことで /usr/src/sys/dev/atkbdc/psm.c を書き換えてみてください。と記載されています。

--- psm.c.orig  2021-04-13 10:02:53.550143000 +0900
+++ psm.c       2021-07-28 10:23:34.503022000 +0900
@@ -6315,7 +6315,7 @@
                    active_ports_count);
 
        /* psm has a special support for GenMouse + SynTouchpad combination */
-       if (active_ports_count >= 2) {
+       if (active_ports_count >= 1) {
                for (port = 0; port < KBDC_AUX_MUX_NUM_PORTS; port++) {
                        if ((active_ports_mask & 1 << port) == 0)
                                continue;

 
(active_ports_count >= 2) の部分を 1 に書き換えたあと、カーネルを作り直して再起動してると・・。
おやまぁっ!! psm0 が model Generic PS/2 mouse から model Synaptics Touchpad になったではありませんかっ!!

最近の Let’s Note のタッチパットでクルクルを有効化させるためにはコードを修正する必要がある。と、いう感じでしょうか。

 
あとは xorg の設定をしていきます。僕の場合、/usr/local/etc/X11/xorg.conf.d/70-synaptics.conf を用意しました。

Section "InputClass"
    Identifier          "touchpad catchall"
    Driver              "synaptics"
    MatchIsTouchpad     "on"
    MatchDevicePath     "/dev/input/event*"
    Option              "CircularScrolling"     "1"
    Option              "CircularScrollTrigger" "0"
EndSection

 
/dev/input/event は何番になっているか? とかは libinput list-devices コマンドが良い感じかも。

あと、他の設定はどこに書いたら良いのか・・。僕の設定は /etc/sysctl.conf に書いていました。色々やったけど、動かなかったので /etc/sysctl.conf に書いていた。と、いう状態でしょうか・・。

# synaptics mouse 
hw.psm.synaptics.vscroll_hor_area=1300
hw.psm.synaptics.min_pressure: 16
hw.psm.synaptics.max_pressure: 220
hw.psm.synaptics.max_width: 10

 
こんな設定が入っていましたf(^^;;。これが効いているのかは sysctl で確認。と、いう感じです。
あと、KDE5 を利用している場合「KDE システム設定」の「入力デバイス」→「タッチパッド」で GUI 的に色々設定できるのでそっちで細かい設定をしたほうが直感的かも。

それにしてもようやっと、ホイールが動作してタッチパッドが動作するようになりました。嬉しいかぎかぎカギリですです。

ホイールクルクル回す他に、二本指で上から下に、もしくはその逆になぞるとスクロールもしてくれます。動作的には ThuinkPad X13 AMD みたいな感じかな。

 
さてと。これで Let’s Note CF-SZ5 はほぼぼカンペキな FreeBSD マシンになりました。 ThinkPad X13 AMD の Renoir が今でもまともに動作しないので、どうしてもこの NotePC が FreeBSD のメイン機として活躍していきそうな気配です。

 
あと、この NotePC は vPro が動くみたい(さすがはビジネス向けっ!!)みたいですが、 FreeBSD はそもそも vPro が動作しないようです。

6月 192021
 

最近はコロナの影響で非常事態宣言が発令されている状況において、皆様、いかがお過ごしでしょうか。
僕は飲み屋さんに行くことができないので、その分飲み代が現金として溜まってきている。みたいな感じかなぁ。

と、いうことで Let’s Note CF-SZ5 の中古を購入してしまいました。型番的には CF-SZ5PDY6S です。
中古ですが、状態が良く A ランクで、届いたのを見たら確かにきれいです。傷らしいのはロック穴の周りに 2,3 個ある程度で他の部分は非常にきれいでした。液晶も無事です。
型番的に CF-SZ5PDY6S という Let’s Note CF-SZ5 ですが、当然、企業向けモデルで、定価だと 30 万 yen くらいらしいですが、これを税込み 41,000yen で購入しました。 最近、アキバでも中古 PC がたくさん出回っているようですが、それに比べるとちょっと高いかな? まぁ、その分程度が良いのでちょっと多めに出した。と、いう雰囲気で;-)。

スペック的にはこんな感じ。

  • OS: Windows10 Pro
  • CPU: Intel Core i5-6300U (2Core/4Thread)
  • Mem: 8GB 増減不可
  • SSD: M2 2280 SATA 256GB
  • 光学ドライブ: 無し
  • SD カードスロット: 有り (SDHC)
  • NIC: if_em and if_iwm

 
約一年くらい前に ThinkPad X13 AMD が届いて、苦労して FreeBSD をインストールしつつもなんとか使っている状態ですが、ちょっと古い PC で動かすと、もっと楽できるんじゃね? みたいな・・。

例えば ThinkPad X13 AMD は default で NIC が付いてないので USB NIC を接続したり suspend/resume できなかったり、AC アダプタ引っこ抜くとリブートしてしまったり・・。やっぱりまだまだ FreeBSD を動かすにはちょっと早い。でもって、 AC アダプタ引っこ抜くと再起動してしまうので、外に持ち出すことができない・・。はぁ・・。

 
と、いうことで、今回購入した Let’s Note CF-SZ5 は FreeBSD 専用機です。

まず、届いた直後にインストールされている Windows10 Pro のライセンスキーをひっこ抜きます。その後、リカバリーイメージを作成して Windows10 の基本的なバックアップは終了。

 
次に FreeBSD/amd64 13.0-RELEASE をインストールです。 SSD が 256GB しかないのでマルチブートはしません。 FreeBSD 専用機です。
FreeBSD インストール時には何も意識することなく、Windows パーティションもサクっと、消してインストールします。

1. UEFI (BIOS) の画面でセキュアプートをオフ
2. 13.0-Rの ISO イメージを UEFI モードで USB メモリに書き込みインストール
3. Windows のパーティションは全て削除
4. FreeBSD のインストールだよん

 
で、無事にFreeBSD/amd64 13.0-RELEASE のインストールが完了。 ports から KDE5 をインストールして環境を整えて無事にシューリョー。マルチブートとか気にしなくて良いのでインストールは非常に楽です。

 
Let’s Note CF-SZ5 は 2016 年の NotePC なので、ちょうど BIOS から UEFI へと切り替わる過渡期で、BIOS 設定でも UEFI と BIOS の両方有効にできます。 ThinkPad X13 AMD には既に BIOS の機能が無いことを考えると中途半端な感じですね。

 
インストール後の機能については以下な感じ。

  • SSD は M2 でありながら SATA 接続なので /dev/ada0 で認識します
  • SD カードスロット は sdhci で認識して SD カードは mmc0 もしくは mmcsd0 で認識します
  • NIC は em0 と iwm0 として認識し WiFi チップは Wireless 8260 として認識します
  • i915kms.ko を利用しているので xrandr で確認するとディスプレーは eDP-1 で認識されるので brightness が利用できます
  • 音はスピーカ・ヘッドホン共に出ます。Fn キーでボリュームも調整できます

 
さすがに古い PC はと、いうか Intel 系 CPU 搭載の NotePC はデバイスが色々動いて良いですねぇ;-)。

今回は graphics/intel-backlight はインストールしていません。 xrandr(1) とか backlight(8) で画面の明るさを変更することができます。

ここまで動作すると、ほぼ ThinkPad X13 AMD と機能的には同等ですね。 AMD 最新 CPU に対してよくやっているなぁ。と、いう感じかな;-)。

 
と、いうことで肝心の xorg について、インストールしたドライバは以下の通り。

xf86-input-evdev-2.10.6_6 X.Org event device input driver
xf86-input-keyboard-1.9.0_4 X.Org keyboard input driver
xf86-input-libinput-0.30.0_1 X.Org libinput input driver
xf86-input-mouse-1.9.3_3 X.Org mouse input driver
xf86-input-synaptics-1.9.1_8 X.Org synaptics input driver
xf86-video-scfb-0.0.5_2 X.Org syscons display driver
xf86-video-vesa-2.5.0 X.Org vesa display driver

 
xf86-video-intel はインストールしません。グラフィックスドライバは以下を利用します。

drm-fbsd13-kmod-5.4.92.g20210419 DRM modules for the linuxkpi-based KMS components
gpu-firmware-kmod-g20210330 Firmware modules for the linuxkpi-based KMS components

 
なので xorg.conf の Section “Device” で Driver “intel” な設定は無いですね。自動的に設定される modesetting になります。
/etc/rc.conf に以下の設定を書くだけです。

kld_list="i915kms.ko"

 
そして、/boot/loader.conf は以下のような感じ。ちょっと長いかな。

#
##
#
kern.vty=vt
hw.vga.textmode=1

#
## ipfw
#
net.inet.ip.fw.default_to_accept="1"

#
## ACPI
#
#acpi_video_load="YES"
acpi_panasonic_load="YES"

#
## psm/sysmouse
#
hw.psm.synaptics_support="1"
hw.psm.elantech_support="1"
hw.psm.trackpoint_support="1"

hint.psm.0.flags="0x6000"

#
## Realtek and Intel wifi license
#
legal.realtek.license_ack="1"
legal.intel_iwm.license_ack="1"

#
##
#
cpu_microcode_load="YES"
cpu_microcode_name="/boot/firmware/intel-ucode.bin"

coretemp_load="YES"

ichwd_load="YES"
smb_load="YES"

linux_load="YES"
linux64_load="YES"
linux_common="YES"
linprocfs_load="YES"

nfsclient_load="YES"
nfslockd_load="YES"
krpc_load="YES"

mem_load="YES"
io_load="YES"
aio_load="YES"

wlan_load="YES"
wlan_xauth_load="YES"
wlan_wep_load="YES"
wlan_tkip_load="YES"
wlan_ccmp_load="YES"
wlan_amrr_load="YES"

firmware_load="YES"
pchtherm_load="YES"

if_iwm_load="YES"
iwm8000Cfw_load="YES"

sound_load="YES"
snd_hda_load="YES"

#ipl_load="YES"
#ipfw_load="YES"

accf_http_load="YES"
sem_load="YES"

evdev_load="YES"
uinput_load="YES"
cuse_load="YES"

 
さてと。これだけ設定して必用な機能がほぼ動作しています。

AC アダプタ抜いてもリブートすることはないです。と、いうことは ThinkPad X13 AMD での問題点は個別にインストールした amdgpu.ko と、いうことになります。確かに /etc/rc.conf に kld_list=”amdgpu.ko” と書かない場合 (それはつまりは scfb で Xorg を動かす場合と、いうことになります) には AC アダプタを抜き差ししてもカーネルパニックになることはありません。

 
さてと。今回の Let’s Note CF-SZ5 ですが、一応、強引に suspend/resume まで動くようにしました。

FreeBSD 13.0-RELEASE は基本的に suspend はするが resume しなかったり resume したとしても画面がブラックアウトしてしまい、リモートから ssh して再起動することにより復活する。と、いう感じです。
基本的に acpi_video.ko は 13.0-RELEASE ではもう利用することはできません。 hw.acpi.reset_video=”1″ ももう使えません。

 
ただ、前のエントリでデスクトップ機が suspned/resume するっ!! と書いています。実際に結構良いあんばいで利用しているんですけども。Xorg は死んじゃうんだけど、 service sddm restart すると復活する。

では i915kms.ko 使っている場合も強引にやったらどうなるんだろう? と・・。

と、いうことで試した結果、 suspend/resume がまんまとできるようになりました;-)。以下の文字列を /etc/rc.resume の最後の exit 0 の上に書いてください。

#
service sddm stop
sleep 2
kldunload i915kms.ko
sleep 2
kldload i915kms.ko
sleep 2
service sddm restart

 
僕は KDE5 を利用しているので、ログインマネージャには sddm を利用しています。resume 後にそれを stop します。次に i915kms.ko をロードし直します。これがキモですっ!! これで X というか、画面 (tty というか vt のコンソール) が戻ってきます。そして再度 sddm を起動します。

suspend 前の画面の情報を引き継ぐことはできませんが、 suspend したあと OS 自体を再起動することなく利用を再開できるので、まぁ、なんとかなりそうです。(妥協的な部分ではありますが・・)。

あと resume したあとタッチパッドが利用できなくなるので /etc/loader.conf に hint.psm.0.flags=”0x6000″ の設定が必要です。

 
と、まぁ、ここまでで、ほぼ完璧に FreeBSD/amd64 13.0-RELEASE が動作しました。ただ、僕的一点困ってることがあります。調べても解決策が見つかりませんでした。

Let’s Note と言えば、タッチパッドをクルクル回すことによりスクロールすることが名物でありますが、その設定がどうにもわかりません。どなたか、現在タッチパッドをクルクル回してスクロールできている方がいましたら、その設定方法を教えて頂けませんでしょうか。

suspend/resume できるワザ書いたので、情報交換。と、いうことで;-)。よろしくおねがいしますぅ。

 
さてと。これで、持ち出せる FreeBSD が手元に準備できた。

この間、仕事でデータセンタに行ってパケットキャプチャする必要に迫られていんですよぉ・・。

Let’s note CF-SZ5 は軽いし NIC 付いているし移動には非常に良い感じ。 ThinkPad X13 AMD は 8Core 16Thread なので、ports のコンパイルにはモッテコイな状態です。今後は二台を上手に使い分けて FreeBSD を楽しみたいところです;-)。