【動画作りました。】Fedora 28がインストールされているIntel NUC(NUC7i5BNH)の電源ボタンとリングのLEDの色を変えることができるようになるまでの、ちょっと長めな道のり。

By | 2018年9月5日 , Last update: 2019年11月3日

はじめに

ちょっと久々のIntel NUCネタになります。

こいつの話題です↓

NUC7i5BNHは電源が入っているときには前面パネルのリング(下図の(a))と電源ボタン(下図の(b))が青色に光ります。

この光り方や色は実はBIOSの設定で変えることができます。

点滅させることもできます。

BIOSの設定の中には”SW Control”なんていう設定もあるので、Linux側からこの色を何とか変えることができないかと思っていたのですが、すでにLinuxのkernel driverを書いている方がいらっしゃいました(参考文献参照)。

それで、kernelのmoduleをコンパイルしてインストールしようとしたのですが…

[panda@pandanote.info intel_nuc_led]$ uname -a
Linux pandanote.info 4.16.15-300.fc28.x86_64 #1 SMP Tue Jun 12 00:42:35 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@pandanote.info intel_nuc_led]# dnf install kernel-devel
メタデータの期限切れの確認は、0:02:05 時間前の 2018年09月05日 20時33分21秒 に実施しました。
依存性が解決されました。
================================================================================
パッケージ アーキテクチャ
バージョン リポジトリ サイズ
================================================================================
インストール:
kernel-devel x86_64 4.17.19-200.fc28 updates 12 M

トランザクションの要約
================================================================================
インストール 1 パッケージ

総ダウンロードサイズ: 12 M
パッケージ展開後のサイズ: 49 M
これでいいですか? [y/N]:

 
というわけで、コンパイルに必要なパッケージがインストールされていない上に、インストールされるであろうパッケージのバージョンが現在使用中のkernelのバージョンと合わない気がします。?

そこで、この記事ではここからIntel NUCの前面パネルのLEDの色が青色以外の色に変化するまでのちょっと長めな道のりについて書いていきます。

なお、BIOSの設定変更はこの記事の後の方に出てきますので、そこまでは何とか読み進めていただけると幸いです。

スポンサーリンク

OSのアップデート

毎度おなじみの手順ではありますが、以下の手順でOSをアップデートします。

  1. root権限で以下のコマンドを実行し、アップデートの対象となるパッケージをダウンロードします。ダウンロードが完了すると、引き続きインストールが始まります。
    [root@pandanote.info intel_nuc_led]# dnf update

     

    「総ダウンロードサイズが1.1Gになるが、それで良いか?」と聞いてきますが、ここは”y”以外の選択肢はありません。


    スポンサーリンク

    前進あるのみです。

  2. 以下のコマンドを実行し、PC(NUC)を再起動します。
    # shutdown -r now

     

  3. 再起動後、以下のコマンドを実行し、kernelのバージョンを確認します。
    [panda@pandanote.info ~]$ uname -a
    Linux yukemuri 4.17.19-200.fc28.x86_64 #1 SMP Fri Aug 24 15:47:41 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

     

以上で、アップデート作業は完了です。

それにしてもNVMe SSDは速いです↓

必要なパッケージのインストール

kernel-develパッケージのインストール

OSのアップデートが完了したら、root権限で以下のコマンドを実行し、kernel-develパッケージをインストールします。インストールの前に、kernelのバージョンとkernel-develパッケージのバージョンが同じであることを確認しておきます。

[root@pandanote.info panda]# dnf install kernel-devel
メタデータの期限切れの確認は、0:50:05 時間前の 2018年09月05日 20時33分21秒 に実施しました。
依存性が解決されました。
================================================================================
パッケージ アーキテクチャ
バージョン リポジトリ サイズ
================================================================================
インストール:
kernel-devel x86_64 4.17.19-200.fc28 updates 12 M


スポンサーリンク

トランザクションの要約
================================================================================
インストール 1 パッケージ

総ダウンロードサイズ: 12 M
パッケージ展開後のサイズ: 49 M
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
kernel-devel-4.17.19-200.fc28.x86_64.rpm 7.7 MB/s | 12 MB 00:01
——————————————————————————–
合計 4.9 MB/s | 12 MB 00:02
トランザクションの確認を実行中…
トランザクションの確認に成功しました。
トランザクションのテストを実行中…
トランザクションのテストに成功しました。
トランザクションを実行中…
準備中 : 1/1
インストール : kernel-devel-4.17.19-200.fc28.x86_64 1/1
Running scriptlet: kernel-devel-4.17.19-200.fc28.x86_64 1/1
検証中 : kernel-devel-4.17.19-200.fc28.x86_64 1/1

インストール済み:
kernel-devel.x86_64 4.17.19-200.fc28

完了しました!

 

elfutils-libelf-develパッケージのインストール

elfutils-libelf-develパッケージも必要なので、以下のコマンドを実行しインストールします。

[root@pandanote.info intel_nuc_led]# dnf install elfutils-libelf-devel
メタデータの期限切れの確認は、0:57:49 時間前の 2018年09月05日 20時33分21秒 に実施しました。
依存性が解決されました。
================================================================================
パッケージ アーキテクチャ
バージョン リポジトリ サイズ
================================================================================
インストール:
elfutils-libelf-devel x86_64 0.173-1.fc28 updates 50 k

トランザクションの要約
================================================================================
インストール 1 パッケージ

総ダウンロードサイズ: 50 k
パッケージ展開後のサイズ: 32 k
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
elfutils-libelf-devel-0.173-1.fc28.x86_64.rpm 626 kB/s | 50 kB 00:00
——————————————————————————–
合計 43 kB/s | 50 kB 00:01
トランザクションの確認を実行中…
トランザクションの確認に成功しました。
トランザクションのテストを実行中…
トランザクションのテストに成功しました。
トランザクションを実行中…
準備中 : 1/1
インストール : elfutils-libelf-devel-0.173-1.fc28.x86_64 1/1
Running scriptlet: elfutils-libelf-devel-0.173-1.fc28.x86_64 1/1
検証中 : elfutils-libelf-devel-0.173-1.fc28.x86_64 1/1

インストール済み:
elfutils-libelf-devel.x86_64 0.173-1.fc28

完了しました!

 

dkmsのインストール

「Building and Installing “from source”」ではインストールができなかったので、dkmsパッケージをインストールしました。

[root@pandanote.info intel_nuc_led]# dnf install dkms
メタデータの期限切れの確認は、1:12:24 時間前の 2018年09月05日 20時33分21秒 に実施しました。
依存性が解決されました。
================================================================================
パッケージ アーキテクチャ バージョン リポジトリ サイズ
================================================================================
インストール:
dkms noarch 2.6.1-1.fc28 updates 78 k

トランザクションの要約
================================================================================
インストール 1 パッケージ

総ダウンロードサイズ: 78 k
パッケージ展開後のサイズ: 219 k
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
dkms-2.6.1-1.fc28.noarch.rpm 670 kB/s | 78 kB 00:00
——————————————————————————–
合計 58 kB/s | 78 kB 00:01
トランザクションの確認を実行中…
トランザクションの確認に成功しました。
トランザクションのテストを実行中…
トランザクションのテストに成功しました。
トランザクションを実行中…
準備中 : 1/1
インストール : dkms-2.6.1-1.fc28.noarch 1/1
Running scriptlet: dkms-2.6.1-1.fc28.noarch 1/1
検証中 : dkms-2.6.1-1.fc28.noarch 1/1

インストール済み:
dkms.noarch 2.6.1-1.fc28

完了しました!

 

intel_nuc_led moduleのビルド

ここまでの作業で、ようやくintel_nuc_led moduleのビルドの準備が整いましたので、以下の手順でサクサクとビルドしていきます。

  1. 以下のコマンドを実行し、GitHubからソースコードをいただいてきます。
    $ git clone https://github.com/milesp20/intel_nuc_led.git

     

  2. intel_nuc_ledというディレクトリができるので、以下のコマンドを実行してmoduleをビルドします。
    [root@pandanote.info intel_nuc_led]# make dkms-install
    dkms add –force /home/panda/EF510-510/led/intel_nuc_led

    Creating symlink /var/lib/dkms/intel-nuc-led/1.0/source ->
    /usr/src/intel-nuc-led-1.0

    DKMS: add completed.
    dkms build -m intel-nuc-led -v 1.0

    Kernel preparation unnecessary for this kernel. Skipping…

    Building module:
    cleaning build area…
    make -j4 KERNELRELEASE=4.17.19-200.fc28.x86_64 -C /lib/modules/4.17.19-200.fc28.x86_64/build M=/var/lib/dkms/intel-nuc-led/1.0/build…
    cleaning build area…

    DKMS: build completed.
    dkms install -m intel-nuc-led -v 1.0

    nuc_led.ko.xz:
    Running module version sanity check.
    – Original module
    – No original module exists within this kernel
    – Installation
    – Installing to /lib/modules/4.17.19-200.fc28.x86_64/extra/
    Adding any weak-modules

    depmod….

    DKMS: install completed.

     

  3. 以下のコマンドを実行し、インストールされたことを確認します。
    [root@pandanote.info intel_nuc_led]# ls -l /lib/modules/4.17.19-200.fc28.x86_64/extra/
    合計 8
    -rw-r–r–. 1 root root 4472 9月 5 21:46 nuc_led.ko.xz

     

BIOSの設定変更。

動作確認の前にBIOSの設定を変更するのを忘れていたので、BIOSの設定を変更しておきます。

基本的には、Intelが提供しているこのページの手順にしたがって設定を変更しますが、”Secondary Power Settings”のタブを開いた後は以下の手順で設定を行います。

なお、本サイトではよくあることではありますが、超短焦点プロジェクタで自宅のリビングの壁に投影した画面をそのまま掲載していますので、若干見にくいかもしれません。その点については悪しからずご了承願います。

  1. “Button LED”の設定(下図の(a))を”SW Control”に変更します。
  2. すると、”Ring LED”の設定(下図の(a))が現れるので、それも”SW Control”に変更します。設定後の画面は下図のようになります。
  3. F10キーを押してBIOSの設定を保存後、NUCを再起動して変更を反映します。

なお、変更したBIOSの設定を保存後にNUCを再起動すると、新たな設定を行うまで電源ボタン及びリングともに消灯した状態となり、稼働音以外ではNUCが稼働しているのかどうかわからなくなりますので、注意が必要です。また、設定を行うとその設定は電源が切れた場合でも保持されるようです。

動作確認の手順例。

動作確認は以下の手順で行うことができます。

  1. インストールしたkernel module(nuc_led.ko.xz)はインストールの直後にはロードされませんので、root権限で以下のコマンドを実行し、ロードしておきます。
    # modprobe nuc_led

     


  2. スポンサーリンク

  3. 次に、以下のコマンドを実行して現在の状況を確認します。
    # cat /proc/acpi/nuc_led
    Power LED Brightness: 0%
    Power LED Blink/Fade: Off (0x00)
    Power LED Color: Off (0x00)

    Ring LED Brightness: 0%
    Ring LED Blink/Fade: Off (0x00)
    Ring LED Color: Off (0x00)

     
    完全に消えてますね。

  4. 試しに、以下のコマンドを実行してみます。
    [root@pandanote.info panda]# echo ‘ring,80,blink_medium,green’ | sudo tee /proc/acpi/nuc_led > /dev/null

     
    リングの部分が2秒周期で緑色に点灯・消灯を繰り返します(点滅のパターンの指定方法については後述。また、点滅のイメージについては次節参照)。

リングをwhite、電源ボタンをamberに指定すると日の丸っぽくなります↓

なお、点滅のパターンは以下の文字列で指定できます。

  • none: 点滅しません。
  • blink_fast: 1秒周期で点灯・消灯を繰り返します。
  • blink_medium: 2秒周期で点灯・消灯を繰り返します。
  • blink_slow: 4秒周期で点灯・消灯を繰り返します。
  • fade_fast: 1秒周期でフェードイン・アウトを繰り返します。
  • fade_medium: 2秒周期でフェードイン・アウトを繰り返します。
  • fade_slow: 4秒周期でフェードイン・アウトを繰り返します。

動画を作ってみた。

文章で「点滅します」と言われてもイメージしにくいと思いますので、動画を作りました↓

前フリがちょっと長めですが、御用とお急ぎでない方はご覧いただけると幸いです。

スポンサーリンク

まとめ

この記事では、NUCのリングと電源ボタンの色をkernel moduleを介してソフトウェア的に設定するために必要な設定等の作業について書いてみました。前の記事にも書きましたが、自宅ではPCのディスプレイというものを使用していないので、BIOSの設定変更作業はプロジェクターで画面を自宅のリビングの壁に投影し、それを見ながら作業をする必要があります。

準備が割と大掛かりになるので、結構つらいです。(´・ω・`)

また、GitHubからいただいてきたコードについてきたREADME.mdによりますと、今回インストールしたkernel moduleはdemonstration/proof-of-conceptとのことだったりするのと、Version 4.4のLinux kernelでしかテストが行われていないとのことなので、使用を続ける場合には自分でメンテナンスするなどの対応が必要そうな予感です。

この記事は以上です。

参考文献