メインコンテンツまでスキップ

Libertouc ES (日本語版) レビュー

· 約2分
ひかり
Main bloger

Libertouch ES

Libertouch ES 日本語配列 (NC07902-B281-ES) を入手しました。

Libertouch ES

Libertouch ES

忖度なし、約 1 カ月使っての感想です。

良いところ

  • 打ちやすさ
    メンブレン方式の中では最高クラス。指に馴染みやすくメカニカルのような軽さだがメカニカルではない打ち心地。ずっとメンブレンで貫いてほしい。
  • 頑丈
    アルミ製で頑丈。ほぼ鈍器。
  • キーキャップが Cherry MX 互換
    キーキャップを付け替え可能なのは嬉しい。

改善してほしいところ

  • 入力がたまに認識しない…
    一部キーが押しても反応しないことがあり、複数キーで入れ替わり発生しているような気がする。おそらくファームウェアやソフトウェアの問題。
  • キーキャップがよく外れる…
    構造上の問題か、スペースキーやエンターキーが外れやすい。不安定感がある。
  • 交換用キーキャップが欲しい
    キー配列変更ソフトが配布されていてそこは良いが、交換用のキーキャップが欲しい。特に左下の Windows キーは需要が大きそうなので特に欲しい。できれば Home・End も。
  • 付属ケーブルを変えてほしい・追加してほしい
    付属ケーブルは Type-C to C ケーブル。パソコンは Type-A がほとんどだと思うので、Type-A to C ケーブルが欲しい。
  • 高い
    試作品なので 8 万と高いのは仕方ない。すべての問題を解決した上で、3 万円台だったら買う。それ以上高いと厳しいかも。

総評

Libertouch ES は 打鍵感と堅牢性に優れた高品質メンブレンキーボード。一方で、入力認識の不安定さやキーキャップの外れやすさ、付属ケーブルの仕様など、実用面で改善を望む点がある。交換用キーキャップやケーブルの選択肢が増えるとさらに魅力的に。フルキーボードや 80% キーボードの選択肢が欲しい。65% よりは需要があるのでは?

今後の改善と発売に期待です。

Raspberry Pi で cockpit に mkcert を用いて証明書を作成し、サーバー (cockpit) とブラウザに設定する方法

· 約2分
ひかり
Main bloger

動作環境

以下の環境で設定を確認しました。

  • Raspberry Pi 5
  • AlmaLinux

各証明書の意味

  • raspberrypi.pem: サーバー証明書 (公開鍵) この証明書は raspberrypi というホスト名に対して発行された SSL 証明書です。Web ブラウザなどのクライアントがこの証明書を使ってサーバーの正当性を確認します。(サーバーにインストールするやつ)
  • raspberrypi+1.pem: サーバー証明書 (公開鍵)
    この証明書は raspberrypi <IP アドレス> というホスト名に対して発行された SSL 証明書です。同上
  • raspberrypi-key.pem:
    raspberrypi.pem に対応する秘密鍵です。サーバー側で保持し、SSL通信の暗号化・復号に使用されます。絶対に外部に漏らしてはいけません。 (サーバーにインストールするやつ)
  • raspberrypi+1-key.pem:
    raspberrypi+1.pem に対応する秘密鍵です。サーバー側で保持し、SSL通信の暗号化・復号に使用されます。絶対に外部に漏らしてはいけません。 同上
  • rootCA.pem: ローカルルート証明書 (公開鍵)
    mkcert が自動生成したローカルCA (認証局) の証明書です。クライアント (ブラウザなど) にこの証明書をインストールすることで、raspberrypi.pem を信頼できる証明書として扱えるようになります。
  • rootCA-key.pem: ローカル CA の秘密鍵 rootCA.pem に対応する秘密鍵で、mkcert がサーバー証明書 (例: raspberrypi.pem) を署名するために使います。mkcert が内部的に使用するもので、通常は触る必要はありません。

証明書の発行

mkcert コマンドを用いて証明書を発行します。発行後、サーバーに配置します。

mkcert raspberrypi <IP アドレス>

sudo cp raspberrypi+1-key.pem /etc/cockpit/ws-certs.d/raspberrypi.key
sudo cp raspberrypi+1.pem /etc/cockpit/ws-certs.d/raspberrypi.crt
sudo systemctl restart cockpit

ローカルルート証明書の場所を確認

PC にルート証明書をインストールするためのルート CA 証明書の場所を確認します。

mkcert -CAROOT

ルート証明書を PC にコピー

ルート証明書を PC にコピーします。

scp raspberrypi:/home/<USER>/.local/share/mkcert/rootCA.pem .
cp rootCA.pem rootCA.cer

Windows で証明書を登録

rootCA.cer を開き、証明書ストアで「信頼されたルート機関」で証明書を登録します。

Android 端末で証明書を登録

rootCA.pem を端末に移動し設定から登録します。

OpenStreetMap を podman でインストールする方法

· 約1分
ひかり
Main bloger

import

japan-xxx.osm.bpf をホームディレクトリにダウンロードしておく。 その後、以下のコマンドを実行し準備。 volume オプション末尾の :Z は SELinux が稼働している場合に付ける。

/data/region.osm.pbf の部分は変更しないこと。

podman volume create osm-data

podman run -v <ダウンロードした osm.bpf ファイル>:/data/region.osm.pbf:Z -v osm-data:/data/database/ overv/openstreetmap-tile-server import

imoprt 例

podman volume create osm-data

podman run -v <ダウンロードした osm.bpf ファイル>:/data/region.osm.pbf:Z -v osm-data:/data/database/ overv/openstreetmap-tile-server import

run

以下のコマンドでタイルサーバーを実行する。

podman run -p 8080:80 -v osm-data:/data/database/ -v osm-tiles:/data/tiles/ -d overv/openstreetmap-tile-server run

ファイアーウォールの設定を行えば、ネットワーク上からアクセス可能。

バックアップを取る

podman volume export osm-data > osm-data.tar

Raspberry Pi をサーバー代わりにしてサイトへ公開する

· 約2分
ひかり
Main bloger

Raspberry Pi で nginx をセットアップ

# nginx のインストールと有効化
sudo dnf install nginx

# /etc/nginx/nginx.conf の編集
# sudo nano /etc/nginx/nginx.conf

# nginx の開始と有効化
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

/etc/nginx/nginx.conf の編集

http { server {} } 内に以下を追加

location / {
return 200 'Hello, world!';
add_header Content-Type text/plain;
}

CloudFlare の設定

  1. https://one.dash.cloudflare.com/ にアクセス。
  2. 「ネットワーク」→「Tunnels」を開く
  3. 「トンネルを追加する」を押す

CloudFlare Tunnels

  1. 「選択する Cloudflared」を押す

Select Cloudflared

  1. 「トンネル名」に適当な名前を入力して、「トンネルを保存」を押す

Save Tunnel Name for Cloudflare

cloudflared のインストール

# cloudflared.repo を /etc/yum.repos.d/ に追加
curl -fsSl https://pkg.cloudflare.com/cloudflared-ascii.repo | sudo tee /etc/yum.repos.d/cloudflared.repo

sudo dnf clean packages

# cloudflared のインストール
sudo dnf install -y cloudflared --nogpgcheck

cloudflared でサービスの起動

sudo cloudflared service install xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

トラフィックのルーティング

ホスト名のサブドメインとドメインと、サービスのタイプ、URL を設定。

alt text

「セットアップを完了する」を押す。

AlmaLinux 10 (Raspberry Pi 5 / GNOME / aarch64) に Mozc をインストールする方法

· 約1分
ひかり
Main bloger

rpm ファイルをダウンロード

  • mozc
  • mozc-gui-tools
  • ibus-mozc

を検索し、rpmfind.net から検索してダウンロードする。

アーキテクチャが正しいかを確かめる。

  • Raspberry Pi 5 の場合は、aarch64
  • 一般的な PC の場合は、x86_64

rpm ファイルの例

  • mozc-2.31.5810.102-160000.1.2.aarch64.rpm
  • mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm
  • ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm

インストール

ダウンロードした rpm ファイルを指定し、dnf コマンドでインストールする。

cd ~/Downloads
sudo dnf install ./mozc-2.31.5810.102-160000.1.2.aarch64.rpm ./mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm ./ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm

ログアウト

一旦ログアウトする。

設定

「設定」→「キーボード」を開き、

  • Japanese (Mozc)
  • Japanese

の順に登録。

設定完了!

GPT-5 を API で叩く

· 約1分
ひかり
Main bloger

GPT-5 が公開されたので、PowerShell で API を叩いてみました。

コード

$uri = "https://api.openai.com/v1/chat/completions"
$headers = @{
"Authorization" = "Bearer $env:OPENAI_API_KEY"
"Content-Type" = "application/json"
}

$body = @{
model = "gpt-5"
messages = @(
@{
role = "user"
content = "ノートと鉛筆の合計は100円。鉛筆はノートより40円安い。鉛筆の値段は?"
}
)
} | ConvertTo-Json -Depth 2

$response = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $body

foreach($choice in $response.choices){
$choice.message.content
}

出力結果

30円

理由:
- ノートをx円、鉛筆をy円とすると
- x + y = 100
- y = x - 40
- 代入して 2x - 40 = 100 → x = 70 → y = 30
- 確認: 70 + 30 = 100、鉛筆はノートより40円安い。

コマンドを叩いてローカル MCP の動きを見てみる

· 約3分
ひかり
Main bloger

処理の流れ

MCP を使用した場合、LLM クライアントでどのような流れで処理が行われるかを Copilot くんに聞きました。

以下、シーケンス図です。

ここで重要なのは、

  1. ①② ツール定義の取得
  2. ④ ツール定義の送信
  3. ⑦ ツール呼び出し要求
  4. ⑧⑨⑩⑪ ツール呼び出し
  5. ⑫ 実行結果の送信

です。

MCP にかかわる部分は、1. と 4. で、 Function calling とほぼ同じ部分が 2. と 3. と 5. です。

コマンドを叩いて呼び出してみる

ローカル MCP を標準入力で使用してみましょう。

Windows PowerShell を用いてコマンドをたたきます。

ツール一覧を取得

例として @modelcontextprotocol/server-filesystem のツール一覧を取得します。

> @{ jsonrpc = "2.0"; method = "tools/list"; id = 1 } | ConvertTo-Json -Compress | npx @modelcontextprotocol/server-filesystem $HOME | ConvertFrom-Json | ConvertTo-Json -Depth 10
Secure MCP Filesystem Server running on stdio
Allowed directories: [ 'C:\\Users\\hikari' ]
{
"result": {
"tools": [
{
"name": "read_file",
"description": "Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
...
]
}
}

tools/list を標準入力で与えることで、ツール一覧を JSON 形式で取得できます。

ツール呼び出し

ツールの情報をもとに呼び出してみます。

> @{ jsonrpc = "2.0"; method = "tools/call"; params = @{name = "read_file"; arguments = @{path = ".gitconfig"}}; id = 2 } | ConvertTo-Json -Compress -Depth 10 | npx @modelcontextprotocol/server-filesystem $HOME | ConvertFrom-Json | ConvertTo-Json -Depth 10
Secure MCP Filesystem Server running on stdio
Allowed directories: [ 'C:\\Users\\hikari' ]
{
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
},
"jsonrpc": "2.0",
"id": 2
}

Rocky Linux 8.10 を WSL にインストールする

· 約2分
ひかり
Main bloger

Rocky Linux 8.10 のイメージをダウンロードする

$dest = Join-Path $env:TEMP "Rocky-8-Container-Base.latest.x86_64.tar.xz"
Invoke-WebRequest -Uri "https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz" -OutFile $dest

インポート

wsl --import RockyLinux-8.10 $HOME $dest

passwd のインストール

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y passwd

ユーザーの作成

$username = "hikari" # 好きなユーザー名を設定
wsl -d RockyLinux-8.10 -u root useradd -mG wheel $username
wsl -d RockyLinux-8.10 -u root passwd -d $username # ユーザーのパスワードを消去

sudo のインストール

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install sudo -y

デフォルトユーザーの設定

$username = "hikari" # 好きなユーザー名を設定
$uid = wsl -d RockyLinux-8.10 id $username -u
if (-not $uid) {
Write-Error "UID の取得に失敗しました。ユーザー '$username' が存在しない可能性があります。"
exit 1
}

$basePath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss"

$targetKey = Get-ChildItem $basePath | Where-Object {
(Get-ItemProperty $_.PSPath).DistributionName -eq "RockyLinux-8.10"
}
if (-not $targetKey) {
Write-Error "DistributionName 'RockyLinux-8.10' が見つかりませんでした。"
exit 1
}

Set-ItemProperty -Path $targetKey.PSPath -Name "DefaultUid" -Value ([int]$uid)

EPEL の有効化

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y epel-release

起動

wsl -d RockyLinux-8.10

デフォルトのディストリビューションにする場合

wsl --set-default RockyLinux-8.10

FastFetch のインストール

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install fastfetch

FastFetch の実行

> wsl -d RockyLinux-8.10 -u root fastfetch
__wgliliiligw_, root@DESKTOP-MS-7C56-B550
_williiiiiiliilililw, -------------------------
_%iiiiiilililiiiiiiiiiii_ OS: Rocky Linux 8.10 x86_64
.Qliiiililiiiiiiililililiilm. Host: Windows Subsystem for Linux (2.0.14.0)
_iiiiiliiiiiililiiiiiiiiiiliil, Kernel: 5.15.133.1-microsoft-standard-WSL2
.lililiiilililiiiilililililiiiii, Uptime: 8 mins
_liiiiiiliiiiiiiliiiiiF{iiiiiilili, Packages: 285 (rpm)
jliililiiilililiiili@` ~ililiiiiiL Shell: bash 4.4.20
iiiliiiiliiiiiiili>` ~liililii Display 1: 1920x1080 @ 60Hz
liliiiliiilililii` -9liiiil Display 2: 1920x1080 @ 60Hz
iiiiiliiliiiiii~ "4lili WM: WSLg (Wayland)
4ililiiiiilil~| -w, )4lf Terminal: Windows Terminal
-liiiiililiF' _liig, )' CPU: AMD Ryzen 9 3900X (24) @ 3.800018 GHz
)iiiliii@` _QIililig, GPU: Microsoft Corporation Basic Render Driver
)iiii>` .Qliliiiililw Memory: 458.57 MiB / 62.76 GiB (0%)
)<>~ .mliiiiiliiiiiil, Disk (/): 51.72 GiB / 1007 GiB (5%)
_gllilililiililii~ Locale: C.UTF-8
giliiiiiiiiiiiiT`
-^~$ililili@~~' ████████████████████████
████████████████████████

RHEL 10.0 で epel-release を有効にする

· 約1分
ひかり
Main bloger
sudo dnf update -y
sudo subscription-manager repos --enable codeready-builder-for-rhel-10-x86_64-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm

EC2 Instance Connect が鍵なしで Windows から繋がらない

· 約1分
ひかり
Main bloger

Windows で Instance Connect へ接続できない

PS C:\> aws ec2-instance-connect ssh --instance-id i-0aa38de21acf2aa1c --region ap-south-1
Bad permissions. Try removing permissions for user: \\OWNER RIGHTS (S-1-3-4) on file C:/Users/hikari/AppData/Local/Temp/tmpm9m1bf7j/private-key.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\hikari\\AppData\\Local\\Temp\\tmpm9m1bf7j\\private-key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\Users\\hikari\\AppData\\Local\\Temp\\tmpm9m1bf7j\\private-key": bad permissions
[email protected]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

2025/06/11 時点での検証。

WSL からだとログイン可能

PS C:\> wsl -- aws ec2-instance-connect ssh --instance-id i-0aa38de21acf2aa1c --region ap-south-1
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Tue Jun 10 22:50:33 2025 from 192.168.0.183
[ec2-user@ip-192-168-0-4 ~]$

なぜ?

追記

ダウングレードすれば接続できた。

治してほしいな。

参考: https://github.com/aws/aws-cli/issues/9114

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2-2.17.35.msi