Lenovo ThinkPad T14 Gen 1 (AMD)を買った

Lenovo ThinkPad T14 Gen 1と交換用パーツ
年始からAsusのZephyrus G14を待っていたのだが発売されてみればUSキーボードを選択できず、
個人輸入するにもアメリカではBestBuy専売でそのBestBuyは転送業者を受け付けないというとにかく面倒なやつだったので諦めた。
今使っているノートPCもMacBook Airでゲーミングノートがどうしても必要というわけでもないので無難そうなLenovo ThinkPad T14を選択。
注文から到着まで5週間かかり発送を待っている間にTiger Lakeが載ったPCも発売されたがフラグシップモデルが優先されている様子だったのでキャンセルはしなかった。

  • Ryzen 7 PRO 4750U
  • 16GB
  • 128GB
  • US配列キーボード

という構成で114,972円。
ここに16GBのメモリを追加して、SSDも1TBのものと入れ替えた。
14万でRyzen 4750U, 32GB, 1TBのノートPCとなったので良い感じ。
楽天Rebatesから22994ポイント付与されることにもなっている。

X13やT14sを選ばなかったのは持ち運びはするが移動はバイクなので少々の重量は問題ないため。
これとは別にデスクトップがあるので15インチ以上のものには興味がなかった。

到着後びっくりしたのが余計なプリインストールアプリが無いこと。
Leonovo Vantageというソフトウェアがインストールされてはいるが、
これはLenovoから提供されるBIOSやドライバーをインストールしてくれるものなので単純に便利。

付属の充電器はやたら大きいので安くて小さいAnker PowerPort III 65W PodAnker PowerLine III USB-C & USB-C 2.0 100Wを使っている。

追加・交換部品

実際の手順に関してはThinkPad T14 Gen 1 SSD換装(純正SSDから交換) - ThinkPad while drinking Whiskyが詳しい。

追記

メモリを32GB積んでいてもVRAMに512MBしか予約されていなかったのでBIOSから最大値の2GBに変更した。

排熱

排気が右側なのでAPUをぶん回しながらマウスを使うと熱い。
その代わり大きな排気口とファンのおかげで排熱には優れている様子なので良し悪し。

ゲーム性能

GPU性能が重要でないものならゲームも快適に遊べるがディスプレイの性能は良くないので動きの激しいゲームはしんどい。

画面表示

解像度1920x1080、スケーリング125%で使っているが一部のインターフェイスなどがぼやけた状態なのが惜しい。
これはWindowsが悪いとも言えるのでMicrosoftには頑張ってほしいところ。

ベンチマーク

Steamのセールで3DMarkを買ったので計測結果を載せておく。
内蔵GPUなので大したスコアは出なかったがついでに測ったCinebenchは流石の数値。

Intel Mac(MacBook Air)との比較

  • スリープからの復帰は明確に劣る。指紋認証の精度の悪さも合わさってUXは悪い。
  • WSL2は便利だがあくまで仮想マシンなのが良し悪し。USBが使えないのも不便。
  • 性能での限界はあるがいろんなゲームが動くのは良い。
  • はちゃめちゃに安い。

Kindle PaperwhiteをJailBreakしてSSHで画像送りつけて表示する

Kindle のディスプレイ応用例 | Rabbit Noteを見てやってみたい!となったのでやった。
ただ家にあったのはKindle Paperwhite 2012でPW1と呼ばれている最初のPaperwhiteで性能的にはだいぶ厳しい。

最初に読むやつ

Kindleの見分け方

PW1に関して

いざJailBreak

詰まりどころ

USBを使った有線でのSSH接続時はパスワードが設定されていない。
しかしWiFi経由ではパスワードは必要になる。
そしてデフォルトパスワードは不明なので公開鍵認証を設定するか、パスワードを変更する必要がある。

Windows 10で有線接続を試みてもRNDIS/Ethernet GadgetではなくUSBシリアルデバイスとして認識されてしまう。
Microsoft Update CatalogからAcerのUSB Ethernet/RNDIS Gadgetドライバをインストールするというのが最も無難な対処法のようだ。
Windows 10 vs Remote NDIS - Ethernet USB/Gadget not recognized - Microsoft Communityなどに戦いの記録が残っている。

必要ファイル

Firmware以外は(Tools Snapshots of NiLuJe's hacks - MobileRead Forums)からダウンロードする

やったこと

端末のリセット

  1. メニュー => 設定 => メニュー

5.3.3へのダウングレード

  1. 機内モードにする
  2. PCと接続する
  3. update_kindle_5.3.3.bin/にコピーする
  4. Kindleのアップデートを行う

JailBreak

  1. kindle-5.4-jailbreak.zipの中身を/にコピーする
  2. Kindleのアップデートを行う

5.6.1.1へのアップグレード

  1. update_kindle_5.6.1.1.bin/にコピーする
  2. Kindleのアップデートを行う
  3. 機内モードをオフにする

KUAL

  1. KUAL-KDK-2.0.azw2/documents/にコピーする

KUAL Helper

  1. extensions/にコピーする

MR Package Installer

  1. extensions, mrpackages/にコピーする

USBNetwork

  1. Update_usbnet_0.22.N_install_touch_pw.bin/mrpackages/にコピーする
  2. Install MR Packages (KUAL => Helper+)
  3. Toggle USBNetwork (KUAL => USBNetwork)

通信周りの設定

Linuxならifconfig usb0 192.168.15.201macOSならネットワーク => RNDIS/Ethernet GadgetのIPアドレス192.168.15.201に設定する。

ssh root@192.168.15.244
curl -s https://github.com/ebith.keys | tee -a /mnt/us/usbnet/etc/authorized_keys

適当なタイミングでKUALのUSBNetworkからAllow SSH over WiFiしておく。

不要なサービスを止める

キオスクモード化するスクリプトをKUAL => Helper+から呼べるようにする。
電源長押しで再起動すると元に戻る。

mkdir /mnt/us/extensions/kiosk
tee /mnt/us/extensions/kiosk/config.xml << EOM > /dev/null
<?xml version="1.0" encoding="UTF-8"?>
<extension>
  <information>
    <name>Kiosk mode</name>
    <version>1.0</version>
    <author>ebith</author>
    <id>kioskmode</id>
  </information>
  <menus>
    <menu type="json" dynamic="true">menu.json</menu>
  </menus>
</extension>
EOM

tee /mnt/us/extensions/kiosk/menu.json << EOM > /dev/null
{
  "items":[
    {
      "name":"Helper",
      "priority":-998,
      "items":[
        {
          "name":"Enable Kiosk Mode",
          "action":"./bin.sh",
          "priority":-997,
          "exitmenu":true,
          "refresh":true
        }
      ]
    }
  ]
}
EOM

tee /mnt/us/extensions/kiosk/bin.sh << EOM > /dev/null
#!/bin/sh
initctl stop powerd
initctl stop framework
lipc-set-prop com.lab126.pillow interrogatePillow '{"pillowId": "default_status_bar", "function": "nativeBridge.hideMe();"}'
lipc-set-prop com.lab126.pillow interrogatePillow '{"pillowId": "search_bar", "function": "nativeBridge.hideMe();"}'
eips -c
EOM

母艦から画像を送りつけて表示させてみる

curl -s https://i.imgur.com/5Tq3v0G.png | convert png:- -colorspace lineargray -define png:color-type=0 -define png:bit-depth=8 /tmp/moon.png
scp /tmp/moon.png root@192.168.15.244:/mnt/us/
ssh root@192.168.15.244 '/usr/sbin/eips -g /mnt/us/moon.png && rm /mnt/us/moon.png'

このあと

元記事の様にスクリプトで画像生成するのはしんどいのでGrafanaのダッシュボードをheadless browserでスクリーンショットを撮ることでどうにかならないかなというところ。
あと実際に壁掛けで運用する場合はルーターの機能でMACアドレスからIPを固定すると良さそう。

Raspberry Pi OS 64bit Lite (Raspbian Buster Lite)のセットアップ

Raspberry Pi 4 Model B
今回は3Dプリンタで印刷したフレームにRaspberry Pi, 2.5インチ SSD, 6010 ファンを搭載したこいつがターゲット。
USB bootのためのbootloaderの更新は済ませてある。
性能的にはddでの計測で読み書き200MB/s前後、openssl speed -multi 4を回しても60℃未満という感じ。

準備

  1. 64bit版のイメージをダウンロードする Index of /raspios_lite_arm64/images
  2. balenaEtcherでSSDにイメージを焼き、/boot/sshを作る
  3. 電源を繋ぎしばし待つ

メモ

ssh pi@raspberrypi.localraspberryで接続する。
ssh-keygen -t ed25519して~/.ssh/id_ed25519.pubGitHubに登録しておく。
sshdの設定が不安ならssh -v -o PubkeyAuthentication=no pi@raspberrypi.localで試せる。

初期設定

passwd
sudo apt update && sudo apt upgrade

echo "NTP=ntp.nict.jp" | sudo tee -a /etc/systemd/timesyncd.conf

curl -s https://github.com/ebith.keys | tee -a ~/.ssh/authorized_keys

sudo tee -a /etc/ssh/sshd_config << EOM > /dev/null
PasswordAuthentication no
PermitRootLogin no
Port 22
EOM

sudo tee -a /etc/dhcpcd.conf << EOM > /dev/null
interface eth0
static ip_address=192.168.0.81/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 1.1.1.1 8.8.8.8
EOM

sudo hostnamectl set-hostname raspberrypi4b
sudo timedatectl set-timezone Asia/Tokyo
sudo dpkg-reconfigure locales

環境整備

ARMで64bitの環境で今どきのツールなどを使おうとすると概ねバイナリの配布がない。
そもそもDebian系はパッケージがあってもリポジトリは無いということも多く面倒。

sudo apt install git tmux vim
sudo update-alternatives --config editor

公式に従って入れるやつ

自前ビルドのやつ

Rust

curl https://sh.rustup.rs -sSf | sh
source .cargo/env

ghq get starship/starship
cd ghq/github.com/starship/starship/
sed -i -e '/^\[dependencies\]$/a openssl = { version = "0.10.30", features = ["vendored"] }' Cargo.toml
cargo build --release
cp target/release/starship ~/.cargo/bin/

ghq get dandavison/delta
cd ghq/github.com/dandavison/delta
cargo build --release
cp target/release/delta ~/.cargo/bin/

cargo install ripgrep
cargo install bat
cargo install lsd
cargo install fd-find

Go

echo "deb http://deb.debian.org/debian buster-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/buster-backports.list
sudo apt -t buster-backports install golang
export GOPATH=$HOME/.go
export PATH=$GOPATH/bin:$PATH

go get -u github.com/junegunn/fzf
go get -u github.com/x-motemen/ghq

dotfiles

ghq get ebith/dotfiles
cd ghq/github.com/ebith/dotfiles
./create_link.py .config .vim .gitconfig .tmux.conf .yarnrc
mkdir -p ~/.vimlocal/{backup,swap,undo}
chsh -s /usr/bin/fish
sudo systemctl reboot
rm .bash* .profile
fisher

このあと

  • VPSで動かしているのをこっちに移して解約する
  • UPSは無いので停電の際はあきらめる