Arch LinuxでVM
やりたいこと
候補
- VMWare → 多分王道。ただ、ライセンスが気軽に遊べるお値段ではなさそう。
- oVirt @ RHEL or CentOS → 良さそう。ただ、最新CPUを導入予定なので最新カーネルを使いたい気持ちがある。
- libvirt(manager, Cockpit) @ Arch Linux → 使い慣れたArchでできたらいいなって。クラスタ化?
Arch Linuxで検討
KVMベースでの仮想化は普通にできそう。クラスタ化が問題だが一旦目をつぶってクライアントOSのインストールまでやってみる。 複数ホストはTerraformでの監理かoVirtを自前ビルドか。
参考:
QEMU/KVM, libvirtのインストールと設定 | 普段使いのArch Linux
実験
環境確認
といいつつ手元にManjaroが入ってたのでManjaroでお試し。後でArchで追試する。
cat /proc/version ✔ Linux version 5.17.1-3-MANJARO (builduser@fv-az47-788) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT Thu Mar 31 12:27:24 UTC 2022
インストール
$ yay -S qemu libvirt ebtables dnsmasq virt-manager
ebtables dnsmasqをインストールすることで、ホストOSでNATされてゲストOSで特に設定することなくネットワークにつながるらしい。
qemu.conf, libvirtd.confの編集
参考サイトの通り
# vim /etc/libvirt/qemu.conf ... # The user for QEMU processes run by the system instance. It can be # specified as a user name or as a user id. The qemu driver will try to # parse this value first as a name and then, if the name doesn't exist, # as a user id. # # Since a sequence of digits is a valid user name, a leading plus sign # can be used to ensure that a user id will not be interpreted as a user # name. # # Some examples of valid values are: # # user = "qemu" # A user named "qemu" # user = "+0" # Super user (uid=0) # user = "100" # A user named "100" or a user with uid=100 # user = "ユーザー名" ←「ユーザー名」は普段使う一般ユーザーのユーザー名に変える。 # The group for QEMU processes run by the system instance. It can be # specified in a similar way to user. group="libvirt" ←グループをlibvirtに変える。 # Whether libvirt should dynamically change file ownership # to match the configured user/group above. Defaults to 1. # Set to 0 to disable file ownership changes. dynamic_ownership = 1 ←コメントアウトを解除。
# vim /etc/libvirt/libvirtd.conf ... unix_sock_group = "libvirt" ... unix_sock_ro_perms = "0777" # set to 0770 to deny non-group libvirt users ... unix_sock_rw_perms = "0770" ... auth_unix_ro = "none" ... auth_unix_rw = "none" ... ...
ユーザーをグループに追加
$ sudo gpasswd -a taiki kvm $ sudo gpasswd -a taiki libvirt
サービスの起動
$ sudo systemctl start libvirtd $ sudo systemctl enable libvirtd
virt-managerの起動
Gnomeでvirt~と打つと仮想マシンマネージャというのが見つかるので起動。 ユーザをグループに正しく追加できていないとパスワードを聞かれる。
仮想マシンの作成
とくに躓くところはなさそう。
天キーにもっていくものご紹介
いよいよ明日が天キー本番ですよ!
むっちゃドキドキしてきた…。
参加者の皆さん、今日くらいは工作は休んで明日に備えますよね?
というのは置いといて、明日天キーで展示するものの説明をします。
meishiにTwitterアカウントを書いたのでもしかしたら一人か二人くらいアクセスしてくれるかと。
Meishi with Joystick
Joystickをキーボードに組み込みたい思いは前からありましたが、 せっかくならいいスティックを使いたいと思ったら意外と物理的制約があったので そのテストと、せっかくなのでmeishi展に出せるものと思って設計しました。
が、スティックに一番近いねじがスティックに干渉してつけられないという痛恨のミスがあり、操作感がイマイチ。 今後設計するキーボードの糧になればいいのでプロトタイプの役割を成したとも言える?
今のところはスティックとスイッチが使えるだけですが、 LED(SK6812mini)を光らせたり、modulo pendantになれたりするはずなのでmeishi展までコツコツ頑張ろうかと。
Corne cherry with SUS body
単に今使っているキーボードも展示したかったので。
重量による効果か剛性による効果か不明だが感触はすごく変わるのでぜひ触ってもらいたいです。
Corneは2台あって、一台はBottomだけSUSなんだけど、天キーにはTOP, Bottom両方SUSの方を持っていきます。
SwitchはZealios 67gだったはず......
Black pill でジョイスティックを使ったHIDデバイス
キーボードのキットを複数作ってきて、物足りないのは親指の使い方。 多くの分離型キーボードで、親指キーが全体的に押しにくい気がする。 もちろん、自分の指の位置に合わせてキー位置ずらしたキーボードを設計してもいいんだけど、 それよりもジョイスティックにしてしまえば親指一本で4キーから上手くいけば8キー+押し込みで9キーくらい担当できるかも。
ぱっと考えると同時押しの制約がありそうなんだけど後述の方法で大分何とかなりそう。
準備したもの
Black pill Amazonで買ったジョイスティックhttps://www.amazon.co.jp/dp/B00M0F21KU PC
ProMicroのおうちがあったので使うつもりだったが、Black pillも一度使ってみたかったのでとりあえず。
やったこと
下記のスケッチになった。
#include <USBComposite.h> #include <USBHID.h> int xPin = PA2; // Select the input pin for the potentiometer int yPin = PA3; int sensorValue = 0; // Variable to store the value coming from the sensor int delayTime = 10; //loop delay int prec = 4096; //Analog input precision float THRESHOLD = 0.7; // Key input threshold const int keyNum = 4; const byte keyMap[keyNum] = { 0x61, 0x62, 0x63, 0x64 }; USBHID HID; // create instance of USBHID plugin HIDKeyboard Keyboard(HID); // create a profile void setup() { //setup input pinMode(xPin, INPUT_ANALOG); pinMode(yPin, INPUT_ANALOG); //setup HID HID.begin(HID_KEYBOARD); Keyboard.begin(); } void loop() { // Read the value from the joystick: int x_raw = 2 * analogRead(xPin) - prec; int y_raw = 2 * analogRead(yPin) - prec; //convert value: float x_val = (float)x_raw / prec; float y_val = (float)y_raw / prec; if (x_val > THRESHOLD) { //right Keyboard.press(KEY_DELETE); } else if (x_val < -THRESHOLD) { //left Keyboard.press(KEY_LEFT_CTRL); } else if (y_val > THRESHOLD) { //up Keyboard.press(KEY_BACKSPACE); } else if (y_val < -THRESHOLD) { //down Keyboard.press(KEY_LEFT_ALT); } else { Keyboard.releaseAll(); } delay(delayTime); }
既知の不具合?
うちの環境で上記を書き込むと、Black pillのCOMポートが死ぬ。 シリアルでデバッグしながらと思ってたらちょっと困った。 HIDデバイスになるっていうのはそういうことなのかもしれない。
動作しているところ
ジョイスティックデバイス動いた。ニュートラルだけリリースにすると、ぐるっと入力したとき同時押しになるので波動拳コマンドでタスクマネージャ起動みたいな動きをするのが面白い pic.twitter.com/z4NdhytLn4
— taiki_yoshinaka (@taiki3) 2019年3月10日
このぐるっと回してショートカットキー入力、個人的には革命なんだけどどうだろうか。
Black Pill でSTM32duinoの準備 with Arduino IDE
Blue Pillの情報も合わせれば楽勝かと思ったがちょっとハマった。 以下覚書
基本方針
こちらに従ってセットアップ。 今回はST-Linkを使ってSTM32duinoのブートローダーを書き込んだ。
はまったところ
https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip
をダウンロードして、~~Arduino/hardware/ の中に展開してやる必要がある。 また、そのフォルダの中のdivers/win/に入ってinstall.batを実行する。 このバッチファイルの実行を忘れていて Couldn't find the DFU device: [1EAF:0003] というエラーが出てしばらくハマった。
MiniAxeのビルドログ
概要
今日行ってきた天キーの戦利品の中でも、miniAxeは組み立てたさがすごかったので組み立てました()
ビルドガイド→
ビルドガイドは丁寧なのでポツポツと躓いたとこ等だけ書きます。
三行でまとめとくと
- フラックスとルーペは用意したほうが良い
- ケース組み立て時も意外と注意が必要
- 感動的なコンパクトさ
つまりフラックス無しのルーペ無しで手ハンダで戦って大変でしたということ。
MiniAxeとは
- 36キーと非常に小さい
- Pro microでは無くQFPなAVRを直付だったり、他の部品も全てSMDと比較的高いハンダ付けスキルを要求
- よくあるダイオードを使った格子回路ではなく、全てのスイッチをMCUに直繋ぎ
- デフォルトでKailh ソケットを同梱でキースイッチがPluggable
MCUの取り付け
最初にして最大の難所。
上の動画のようにやれば簡単そうだが、昔買ったフラックスが見当たらなかったので 一本一本手ハンダしました。
汚い...... 案の定、左手はすぐに認識したが、 右手は認識せず延々とハンダを溶かし直したり吸い取り器で吸ったりつけなおしたりする羽目になりました。
他の面実装部品の取り付け
真ん中が水晶発振子をつけた所でちょっと左にあるのが水晶発振子の裏面です。
カバーが金属っぽいので周囲のハンダを盛りすぎるとショートしそうだなと思い、 AVR周りのデバッグのときにこちらも結構疑ってたりしました。
抵抗とかコンデンサとかはNyquist作るときにもやったので特に問題なく。
USB端子の取り付け
これが地味にMCUと同じくらい大変でした。
ピッチが狭いのもそうなんだけど、何せ金属カバーがハンダ付け箇所にオーバーハングしていて、 ハンダをつけ過ぎたりすると吸い取るのが他より大変。
Kailh ソケットの取り付け
ビルドガイドでも注意している通り、左右それぞれ真ん中の二箇所だけ上下逆なので注意。
ソケットが全部つくと物々しい感じに。
ガワの組み立て
ハンダ付け終わって油断してましたがここも結構難儀しました。
ネジの寸が足らない問題
下手な図でなんですがMiniAxeの上下プレートとPCBの固定は下図のような層になっています。
で、困ったのがボトム側ねじの長さが足りなくてナットまで届かない。
実測すると足りなかったねじのネジ部の長さが2.7mmでアクリルプレートが2.06mm厚とか。 どちらかというとねじの個体差とかナットとの相性みたいですね。 仕方がないのでアクリルを少しリーマーで削ってねじが少し埋まる感じにして届かせました。
アクリルの割れ
これはただの自分のミスなんですが上述のねじによる柱がMiniAxeでは外周ではなく内側にあるので、 外側のアクリルに力をかけてしまうと簡単に割れます。 ヒビで済んだので問題はないですがもし今後作る人が見てたら気をつけて。
QMK firmwareの書き込み
まだQMKのマスターにマージされてないということで叩いたコマンドは下記。 (環境はUbuntu)
mkdir miniAxe && cd miniAxe git pull https://github.com/ka2hiro/qmk_firmware.git cd qmk_firmware git checkout miniaxe_support sudo make miniaxe:default:dfu
突然こんなことを書き出したのは今日の天キーで ”自作キーボードの本当のハードルはハンダ付けではなくて謎の設計図共有サイトの利用” みたいな話があったので。
完成
ソケットということもあり、余っていたGateronのクリアを気軽につけて動作確認をしてみました。
更に有り物のキーキャップを付けて完成。
後記
使用感
もともとこのキーの少なさはかなりハードルが高いと思ってましたが 驚異的なコンパクトさを目の当たりにするとなんとか使いこなしてみたくなる魅力を感じます。
作業について
キー自体少ないのと、キー毎のダイオードがない分部品点数はだいぶ少なく感じました。
今回は3時間弱+AVRの動作不良チェックで合計4時間くらいかかったけど、QFPがさらっと付いて動作問題なければ2時間くらいで作れそうです。
イベントでRTAとかしても面白いんじゃないかなーなんて思いました。
天下一キーボードわいわい会 Vol.1に参加してきました
今日は天下一キーボードワイワイ会、略して天キーに参加してきました。
概要
- 日時:2018/11/04
- 場所:東京都港区六本木3-2-1 住友不動産六本木グランドタワー 24F DMM.comグループ セミナールーム
- Compass:https://connpass.com/event/104755/
申込み枠が公開時200名→当日夕方に満席→250名に増枠→当日中?翌日?くらいには満席になってたこともあり、 多分すごく混むだろうな、と予想して向かいました。
待機列形成が11時から、開場が12時で物買うつもりなら早く行ったほうが良かろうと思って 11時20分くらいに到着したら30番目くらい?最終的に開場時には50人以上並んでいた感じでした。
早く来る人達は自分含めて買い物目的と思うと、品切れまくるかと思いきや、 意外とどのスペースも数を持ってきてくれてたようで売り切れて買えない、 みたいな物もなくありがたい感じでした。 今日販売開始です、みたいなものも結構あってホクホク。
スケジュールは下記
時間 内容 12:00 開場 13:00 オープニング 13:00 - 17:00 交流会 13:30 - 14:00 国内で手に入るキーボードまるわかり(@eucalyn_) 14:30 - 15:30 それはそう公開収録(@Biacco) 16:00 - 16:30 誰でもできるキーキャッププロファイル作成入門(仮)@monksoffunkJP 17:00 エンディング
最初の2つ、国内で手に入るキーボード丸わかりとそれはそう公開収録を見てて思ったのが、 国内で一定以上の規模でキーボードキット開発してる人達がほぼ全員来ていて、 主要なキーボードキットがほぼ全て会場で買える状態だったということ。
おかげで国内で買えるキットの半分以上手元に集めた疑惑も。 そういうわけで今回の戦利品は以下。
- Ergo42 Modulo Alpha
- Corne Cherry ピンクアクリル x 白基板(アウトレット)
- Fortitude60 クリア (アウトレット)
- miniAxe
- TENTAKU
- Cherry Development Kit (銀軸)
- キースイッチ20種セット
- Kailh Silver 35g Lubed * 50個
- ハンドスピナーキーキャップ 青ラメ(会場限定色)
金額でいうとちょっと洒落にならないので今年はもうおとなしくしていようと思います。