Help us understand the problem. What is going on with this article?

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

背景

久しぶりに自作キーボード(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

zuk2y
SEです。大学通っていたりもします。
https://zuk2y.hatenadiary.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした