LoginSignup
0
0

More than 3 years have passed since last update.

LinuxのModemManagerが自作キーボードへのキーマップ書き込みを邪魔している時の対処法

Posted at

背景

久しぶりに自作キーボード(ErgoDash mini)のキーマップをいじろうとしたらハマったため共有です。
ErgoDash miniに限らず、Pro Microを使用した自作キーボード(というよりはArduino互換ボードを使用したデバイス全般)をLinux環境で扱う際に発生しうる事象です。

事象としては、QMK Firmwareをクローン済のディレクトリにて、以下のコマンドでキーマップの書き込みを行おうとしたところ、

$ sudo make ergodash/mini:[キーマップのディレクトリ]:avrdude

以下のようなエラーが発生し書き込みに失敗しました。

avrdude: Error: butterfly programmer uses avr_write_page() but does not
provide a cmd() method.

発生時の環境情報は以下の通り。

$ uname -vrpm
4.15.0-76-generic #86-Ubuntu SMP Fri Jan 17 17:24:28 UTC 2020 x86_64 x86_64

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

とりあえず結論

LinuxのModemManagerの割り込みによってキーマップの書き込みが失敗していました。
以下の通りModemManagerを停止させた後、書き込みを再実行して成功しました。
※必ず、ModemManagerを利用していないことを確認してから実行してください。モバイルブロードバンド接続していたら怪しいので、踏みとどまりましょう。

$ sudo systemctl stop ModemManager.service

解説

ModemManagerは、モバイルブロードバンドでの接続をよしなに制御してくれるデーモンです。
モバイルブロードバンド接続で利用するモデムは、USB接続のものが多く存在します。
そのため、当然ですが、ModemManagerはUSBポートを開くことができます。
キーボード(というよりも、Pro Micro)が接続されているUSBポートも例外ではなく、キーマップ書き込み処理中にModemManagerによる割り込みが発生すると処理が失敗します。

有名な問題のようで、QMK Firmwareのリポジトリでも対応するためのissueが起票されています。
見たところ、対応策は「フラッシュ処理を実行する際にModemManagerが実行中だったら警告を出す」といったものになりそうなので、やらなきゃいけないことは変わらなさそうです。

停止したModemManagerは、利用しないのであればそのまま放置で問題ないです。
絶対に利用しないということであれば、以下コマンドで自動起動設定を無効化しても良いでしょう。

$ sudo systemctl disable ModemManager.service

「そうはいっても、起動していたものだから、元に戻したいな...」ということであれば起動し直しても良いでしょう。

$ sudo systemctl start ModemManager.service

参考にしたページ

Helix キーボードキットを組み立てた - FOHTE.NET
avrdude: Error: butterfly programmer uses avr_write_page() but does not provide a cmd() method - Stack Exchange
#877024 modemmanager should ask before messing with serial ports - Debian Bug report logs

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0