taiki3's engineering note

プログラミング、電子工作、アクアリウムなど色々. 当面は自作キーボードのこと. 本業はデータサイエンティスト見習い(?)

Arch LinuxでVM

やりたいこと

Linux仮想マシンクラスタを組みたい。

候補

  • 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

カーネルモジュールなど確認諸々はArch Wikiを参照

インストール

$ 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展に出せるものと思って設計しました。

f:id:taiki3e:20190503235835p:plain

が、スティックに一番近いねじがスティックに干渉してつけられないという痛恨のミスがあり、操作感がイマイチ。 今後設計するキーボードの糧になればいいのでプロトタイプの役割を成したとも言える?

今のところはスティックとスイッチが使えるだけですが、 LED(SK6812mini)を光らせたり、modulo pendantになれたりするはずなのでmeishi展までコツコツ頑張ろうかと。

Corne cherry with SUS body

単に今使っているキーボードも展示したかったので。

重量による効果か剛性による効果か不明だが感触はすごく変わるのでぜひ触ってもらいたいです。

Corneは2台あって、一台はBottomだけSUSなんだけど、天キーにはTOP, Bottom両方SUSの方を持っていきます。

SwitchはZealios 67gだったはず......

f:id:taiki3e:20190504000602j:plain

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デバイスになるっていうのはそういうことなのかもしれない。

動作しているところ

このぐるっと回してショートカットキー入力、個人的には革命なんだけどどうだろうか。

Black Pill でSTM32duinoの準備 with Arduino IDE

Blue Pillの情報も合わせれば楽勝かと思ったがちょっとハマった。 以下覚書

基本方針

ht-deko.com

こちらに従ってセットアップ。 今回はST-Linkを使ってSTM32duinoのブートローダーを書き込んだ。

はまったところ

Arduino IDE で書き込めるようにするためには、

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は組み立てたさがすごかったので組み立てました()

ビルドガイド→

github.com

ビルドガイドは丁寧なのでポツポツと躓いたとこ等だけ書きます。

三行でまとめとくと

  • フラックスとルーペは用意したほうが良い
  • ケース組み立て時も意外と注意が必要
  • 感動的なコンパクトさ

つまりフラックス無しのルーペ無しで手ハンダで戦って大変でしたということ。

MiniAxeとは

  • 36キーと非常に小さい
  • Pro microでは無くQFPなAVRを直付だったり、他の部品も全てSMDと比較的高いハンダ付けスキルを要求
  • よくあるダイオードを使った格子回路ではなく、全てのスイッチをMCUに直繋ぎ
  • デフォルトでKailh ソケットを同梱でキースイッチがPluggable

MCUの取り付け

最初にして最大の難所。

www.youtube.com

上の動画のようにやれば簡単そうだが、昔買ったフラックスが見当たらなかったので 一本一本手ハンダしました。

f:id:taiki3e:20181104013358j:plain

汚い...... 案の定、左手はすぐに認識したが、 右手は認識せず延々とハンダを溶かし直したり吸い取り器で吸ったりつけなおしたりする羽目になりました。

他の面実装部品の取り付け

f:id:taiki3e:20181104013556j:plain

真ん中が水晶発振子をつけた所でちょっと左にあるのが水晶発振子の裏面です。

カバーが金属っぽいので周囲のハンダを盛りすぎるとショートしそうだなと思い、 AVR周りのデバッグのときにこちらも結構疑ってたりしました。

抵抗とかコンデンサとかはNyquist作るときにもやったので特に問題なく。

USB端子の取り付け

これが地味にMCUと同じくらい大変でした。

ピッチが狭いのもそうなんだけど、何せ金属カバーがハンダ付け箇所にオーバーハングしていて、 ハンダをつけ過ぎたりすると吸い取るのが他より大変。

f:id:taiki3e:20181104014044j:plain

Kailh ソケットの取り付け

ビルドガイドでも注意している通り、左右それぞれ真ん中の二箇所だけ上下逆なので注意。

f:id:taiki3e:20181104013929j:plain

ソケットが全部つくと物々しい感じに。

f:id:taiki3e:20181104014343j:plain

ガワの組み立て

ハンダ付け終わって油断してましたがここも結構難儀しました。

ネジの寸が足らない問題

下手な図でなんですがMiniAxeの上下プレートとPCBの固定は下図のような層になっています。

で、困ったのがボトム側ねじの長さが足りなくてナットまで届かない。

実測すると足りなかったねじのネジ部の長さが2.7mmでアクリルプレートが2.06mm厚とか。 どちらかというとねじの個体差とかナットとの相性みたいですね。 仕方がないのでアクリルを少しリーマーで削ってねじが少し埋まる感じにして届かせました。

f:id:taiki3e:20181104015451p:plain

アクリルの割れ

これはただの自分のミスなんですが上述のねじによる柱が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のクリアを気軽につけて動作確認をしてみました。

更に有り物のキーキャップを付けて完成。

f:id:taiki3e:20181104020101j:plain

後記

使用感

もともとこのキーの少なさはかなりハードルが高いと思ってましたが 驚異的なコンパクトさを目の当たりにするとなんとか使いこなしてみたくなる魅力を感じます。

作業について

キー自体少ないのと、キー毎のダイオードがない分部品点数はだいぶ少なく感じました。

今回は3時間弱+AVRの動作不良チェックで合計4時間くらいかかったけど、QFPがさらっと付いて動作問題なければ2時間くらいで作れそうです。

イベントでRTAとかしても面白いんじゃないかなーなんて思いました。

天下一キーボードわいわい会 Vol.1に参加してきました

今日は天下一キーボードワイワイ会、略して天キーに参加してきました。

概要

申込み枠が公開時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個
  • ハンドスピナーキーキャップ 青ラメ(会場限定色)

金額でいうとちょっと洒落にならないので今年はもうおとなしくしていようと思います。

f:id:taiki3e:20181104010143j:plain

空中配線練習

前回作った3Dプリントモデルで空中配線の練習をした。

まずダイオードでカラム方向の配線をして、 f:id:taiki3e:20181023002058j:plain

UEW(ポリウレタンエナメル線)でロー方向の配線。

f:id:taiki3e:20181023002222j:plain

太さは多分100ミクロンくらいの結構太いやつ。

f:id:taiki3e:20181023002615j:plain

こんな風に巻いてからハンダ付けした。 UEWは被覆剥かなくてもハンダ付けの段階でそこだけ勝手に溶けるから楽。

注意点は温調半田ごてで温度低めだと被覆がちゃんと溶けないことがあること。

今度はこれをPro microにつないでテンキーにしたり、 ESP32につないでBLEのトライアルに使いたい。