2年越しにUHK(Ultimate Hacking Keyboard) が届いたのでUbuntu18.04で使えるように設定してみた

2015年末に一時期話題になっていたUHK(Ultimate Hacking Keyboard) http://ascii.jp/elem/000/001/066/1066910/ ですが,2年の遅延でやっと届きました. f:id:u1s:20180820162451p:plain

本記事ではUbuntu18.04で設定して, 自分が使えるようになるまでの設定例を紹介します.

記事の目的

UHKですが, 以下の公式ページの画像を見たらわかるのですが初期配置がかなり独特です. というのも,独自のMouse, Mod, Fnキーが3つもあるためです.

  • Mouse: 文字通り,このキーを押しながらキーを入力するとマウスカーソル動かしたり,マウスクリックができてしまう不思議キー
  • Mod: HHKのFnキーの一部代替に近い存在.Functionキー使うときやカーソルキー使うときに利用することを想定してるらしい.
  • Fn: 音量ボリューム調整や音楽設定などが初期だと割り当て

Ergodoxみたいにカスタマイズしなくても使えるとはいえ, 初期配置のままだと指が混乱しかしません.(Ctrlが欲しい位置にMouseキーがあったり, Space押したい位置にModキーがあったりするので生きていけない)

ultimatehackingkeyboard.com

幸いにも開発側もそれはわかっているらしく, 以下サイトでハードウェアキーの割当変更が出来るツールを公開しているので,それを利用して設定していきます.

github.com

ハードとしてのレビューは以下の記事が良い感じなので紹介して割愛.

kimihiro-n.appspot.com

また,ハードウェアキーの変更のみだとUbuntuでの利用上は不便なところもあったので,OS側の設定も紹介します.

Agent(キーボード設定ツール)のインストール方法

Linux用のAppImageが公開されているので,使います. Mac/Win用もあります. さくっと入れられて便利.

  1. Releases · UltimateHackingKeyboard/agent · GitHub から UHK.Agent-1.2.7-linux-x86_64.AppImage をダウンロード
  2. sudo ./UHK.Agent-1.2.7-linux-x86_64.AppImage

カスタマイズの仕組み及び初期配置

Layerの概念を4層持っていて, それぞれをキーを押して切り替える形になります. 便宜上,Base/Mod/Fn/Mouseと名前ついていますが, 後からどうでも中身の配置は実は変えられます.

以下がBaseの初期配置(Mac用キーボードモード). 初見でこれをブラインドタッチ出来る人はおるまい・・・ f:id:u1s:20180820165332p:plain

UHKのキー配置 設定例

Base Layer

いろいろと手を入れてますが,大事な修正点は以下.

  • Spaceを左右対称配置に変更
  • 左手小指の位置にCtrlないと死んでしまう体質なので,CtrlはAの横に配置
  • マカーなのでSpaceの隣にCmdないと死んでしまう体質なので,Space横にSuper(UbuntuでのCmd相当)を配置
  • 右手一つでマウス操作が出来るようにSpace下部の拡張ボタンをMouseキーに変更
  • HHKB使ってる時と違和感ないようにFnキーは一番右下に移設

f:id:u1s:20180820154902p:plain

Mod Layer

  • カーソル移動をhjklを利用する形に変更

f:id:u1s:20180820154929p:plain

Fn

  • 特に変更なし.

f:id:u1s:20180820155002p:plain

Mouse

コンセプトとしては右手片手でホームポジションでポインタ操作(あくまで補助なので)

  • hjklでマウス移動するように修正

f:id:u1s:20180820155046p:plain

Ubuntu18.04側でのキーボード設定

UHKでの設定ですが,これまでの内容で実は一点だけ致命的な問題があります. というのもESCキーがModキーを押さないと使えないという問題です.

Vimmer的にはESCキーを1タッチで押せないと非常に苦しいですし, 様々なアプリケーション使ってるときにフォーカス外す目的でもESCキーはよく使うのでできれば, 設定したいところです. しかし単独キーとして使えるものはほぼ使い切ってるので, 既存キーをうまく使って解決する必要があります.

具体的にはCtrlキーを単独押しでESCキーにするという回避策です.追記で,ハードウェアレベルで達成出来てました :bow: また,他にも何点か普段使いする中で設定しておく必要があったので, まとめます.

xkeysnailの設定

基本的には以下サイトの内容で入れられます. poyo.hatenablog.jp

自分が設定しているのは以下.

  • Ctrl(またはCaps)単押しでEsc
  • Vim like cursor
    • CtrlだけでなくSuperでも発動するようにしてます.

SuperキーでActivityが起動するのを無効にする

初期値だとleft_superキーを押すことでActivityが起動するようになってますが,邪魔なので封印. 以下コマンド実行で出来ます

gsettings set org.gnome.mutter overlay-key 'Alt_R'

まとめ

UHKは初期状態だとかなり独特で使いづらいですが, カスタマイズ性も非常に高いので自分なりに設定することで非常に良い動きをするように出来ました.

片手でもある程度操作できるようにできるし,両手で操作してるときもロードバイクの姿勢然り,肩幅まで腕が開いてる状態なので,非常に肩周りの筋肉に優しくて肩こりしづらくなった感じあります.

また, 募集かかってた2015年時点だと物珍しかった分離型キーボードもここ2年でErgodoxしかりKinesis Freestyle2然りとかなり普及してきてるのであまり新鮮味はありませんが, 2年の中の戦いをリアルタイムに見ることもできて,最後までゴール出来てなかなかの感慨深さもあります.(参考までに開発履歴. https://www.crowdsupply.com/ugl/ultimate-hacking-keyboard/updates )

最後にメッセージカードがついてきてたので,紹介して本記事は終わりにします.

f:id:u1s:20180820161409p:plain

後, キー配置変えまくってるので, 無印字キーが欲しいw

追記(Controll押したときに単独だとEscape動作にすることがハードウェアで出来ました)

xkeysnailでCtrl単押しEsc(SandSの亜流)をやっていましたが, 本家の方に,それ secondary roleで出来るよと言われて試してみたら,ハードウェアレベルでSandS相当が出来ました.

というわけで直した状態が以下.

f:id:u1s:20180820222540p:plain

キー自体の設定はこんな感じに設定します.通常時はEscapeを割り当てておき, Secondary Roleで組み合わせて使ったときの動作を指定する形です.

f:id:u1s:20180820222713p:plain

もう一つあったコメントのsudoなしでも立ち上げられるよ,という点は手元の環境だとログ無しで死亡してくれて,sudoは必須な感じでした. なんでだろ...

デスクトップ環境をMacからUbuntuに移行する 2018

7,8年ほどMacなデスクトップ環境で生きてきたが,ここ最近のAppleMac愛の欠如も鑑みて,自宅のデスクトップマシンをMacOS((High Sierra)からUbuntu18.04に切り替えた. 時間が立つと古くなると思うが,1年に1回ぐらいは見直しをしたいので,その時のためのメモがてら記事として残す.

そもそもなぜ移行するのか?

以下2点でMac固執する必要が無くなったのと心機一転.

  1. MacOSのハードウェアの更新が遅すぎる
    • 新型Mac miniが出てこないので, 新しいデスクトップマシンがそもそも組めない(Mac Pro? 知らない子ですね
  2. Chromebookを業務で利用し始めたので, そもそもアプリがChrome動けばほとんど使えるようになった
    • TerminalとSlack以外はほぼブラウザベースアプリしか使ってない事実...

移行前の懸念点及び移行した後の結果

以下3点が移行前に気になっていた点と移行してみての結果. 総評としては許容可能レベルということで常用することにしました.

  • ユーザーインタフェース周りが不便にならないか
    • ☁ Magic Trackpad2がUbuntuでドライバが安定したものが出ていない & 慣性スクロールがうまく効かないのダブルパンチにより,利用を断念
      • ひとまずマウスで耐えきれるようにキーボード周りを整備
  • フォントのアンチエイリアスが我慢可能なレベルか?
  • キーボード操作がMac + Karabiner相当ができるか?
    • ☀ いろいろと選択肢があったが, xkeysnailを使って代替可能. 自分が使っている機能は全部移行できた. :+1:

利用ハードウェア

自宅は一時期,ノートPCをメインマシンにしていた時期もあったけど, 椅子に座って作業をするためには固定端末がないとなかなかやらないという自分のだめさ加減もあって, 今はデスクトップ専用マシンを用意しています. 今回は以下2点のために,Intel NUC NUC7i7DNHEを採用.

  • 机の構成の自由度を取りたいので小型マシンにして,モニタの裏側に置きたい
    • 昔はタワー型使ってたけど足元においててそこがホコリの温床になるので最近は撤去
  • 机の上に設置なので,音がうるさいのも嫌

Ryzenが話題になってる現状では貧弱な4コア8スレッドだけど,まぁ,k8s動かすわけでもないので許容する. メモリ・SSDは旧マシンのを転用.(DDR4 2100MHz 32GB)

たまーにCPU使用率が50%を超えてくるとファンの音がするが, 常用時はほぼ無音なので今のところ満足してます.

導入アプリ

真ん中にブラウザと作業中ウインドウを持ってきておいて,左右にSlackやTweetdeckおいたりしてます f:id:u1s:20180819221513p:plain

Chrome WebApp

基本的にはChromebookで生きていけるようにしてるので, ほぼこれで事足りる. Chrome WebAppはChromeOSじゃないので使えなくなってしまったが, Web Page Shortcurt機能(More tools -> Create Shortcut で使える)でアプリ化ができるので,採用.

メーラー

Inboxをメインで使っているが, 複数プロファイルの使い分けがWebAppだといまいちだったので, Wavebox( https://wavebox.io/ )を利用.

余談だが,Waveboxだとmail以外の機能もプロファイルを使い分けて使えるので仕事用や副業用などで複数G Suite環境があるときに便利です.

上記以外

SlackもWebAppで入れることは出来るのだけど, WebAppだとMulti Team構成の時にウインドウが複数に分かれてしまうという欠点がある. Native Appで入れるとMultiTeam対応しているので,debパッケージで個別にインストール. aptで入れることは出来るのだが,日本語変換周りが腐る事象があったため, Slack公式サイトからdebパッケージ落としてきて, gdebi で依存関係解消してインストール.

Desktopの設定

Topbar / Titlebarの消去

普段のエンジニアリング系作業はTerminalで作業が多いのだけど, Terminalを利用するときにTerminal以外のものが表示されると非常に気になるので消し去りたい. 具体的にはTopbarとTitlebar.(topbar相当はtmuxで表示してるという事情もある)

これらは標準設定だと消すことができないが, gnomeのextensionを入れることで削除可能. 以下, 入れ方.

sudo apt install chrome-gnome-shell
  1. Chrome Extensionを入れる
  2. hide-top-bar( https://extensions.gnome.org/extension/545/hide-top-bar/ ) を入れてgnome-shell-integrationからactiveにする
  3. hide-title-bar( https://extensions.gnome.org/extension/1267/no-title-bar/ ) を入れてgnome-shell-integrationからactiveにする

キーボード入力中にマウスカーソルを消す

一応,以下でnuclutterを入れることで消せるらしいのだが,chromeでうまく効いてくれない・・・ gnome-terminalでは動く

$ sudo apt install unclutter
$ vi /etc/default/unclutter
EXTRA_OPTS="-keystroke -root"

Terminalの設定

前述のGnome自体の設定でタイトルバー・トップバーを消せて特に不満もないので, gnome-terminalをそのまま採用してます.カラースキームはMacでiTerm2使ってるときにも使っていたSolarized darkを採用.

Font

fontはNerd font(terminalで独自定義のemojiを利用できるようにしているプロジェクト) のパッチがあたったNoto sansを利用.

git clone https://github.com/ryanoasis/nerd-fonts
cd nerd-fonts
# bulkでパッチがあたったフォントがインストールされる. 使いたいのが決まってるなら引数に入れれば個別に入れることも可能
./install.sh 

Terminalの自動起動設定

マシンが立ち上がってきたときにTerminalが起動していてほしいので,以下を設定しておき,自動起動させる. 本当はtmuxinatorも起動させたいのだが, tmuxinatorをrbenvで動いているruby側にインストールしてしまってるので実行パスの引き渡しができなくて今のところは断念している.

cat .config/autostart/gnome-terminal.desktop
[Desktop Entry]
Exec=gnome-terminal --maximize
Type=Application

Terminalの中身

とりあえず起動すると全画面表示で以下みたいな構成になるようにしてます. Terminalは透過設定にしておいて, 前述のウインドウが起動してる状態だと透けた状態で資料見ながらTerminal使うスタイル. f:id:u1s:20180819221543p:plain

  • 仮想端末管理: tmux
  • tmuxのウインドウ管理: tmuxinator
  • Shell: Zsh
    • 良いタイミングだったのでfishにしても良かったけど,今回は見送り(単に面倒だっただけ
  • Zsh plugin管理: zplug
    • 元々はantigenだったけど,整理がてら変更
    • plugin installがコンフィグで楽にかけるようになったし,ロードも速くなってくれて満足
  • Zsh theme: powerlevel9k
    • 重たいし,NerdFont必須だけど表示のスタイリッシュさで採用
    • colorlsも入れるとterminalが賑やかに...
    • k8s context表示も標準であるので, 自分がどの環境に対して作業してるのかとかも見やすくて良い感じ