Windowsでキーマップを変更する

Windowsでキーマップを変更する

  • Windows PC でキーマップを変更するためのメモ
  • PC は Windows 10 Home
  • 本ページではレジストリエディタを用いたレジストリ設定を記載しています
    • 本ページの内容を参照される際にはすべて自己責任にて実施してください

要件 ( やりたかったこと )

  • キーボード上のキーマップを変更 ( CapsLock を 追加の Ctrl として使う みたいな設定を行う方法のメモ )
  • 追加のソフトウェアは使用しない ( OSの機能のみで実現したい )

変更方法

レジストリの設定を作成して変更する

レジストリの変更方法

準備

レジストリの変更を行うには以下の2つの方法がある ※ 変更を反映させるためには再起動が必要

  • regedit.exe ( レジストリエディタ ) でて入力する
  • regファイルを作成して読み込ませる ( regedit.exe でインポートする )

どちらでやってもそんなに作業量は変わらなさそうだが、今回は regedit で直接入力したほうが楽そうなのでその方法をメモしておく ( reg ファイルは regedit から Export できるので、複数の PC に設定する場合には Export と Inport で対応するのが楽そう )

regedit での設定ファイルの作成

regedit.exe を開き、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard LayoutScancode Map を作成

設定内容の作成

設定内容は以下の内容で構成されるらしい

Start offset (in bytes) Size (in bytes) Data
0 4 Header: Version Information
4 4 Header: Flags
8 4 Header: Number of Mappings
12 4 Individual Mapping
... ... ...
Last 4 bytes 4 Null Terminator (0x00000000)

Microsoft社ドキュメント Hardware Dev Center Keyboard and mouse class drivers より引用

説明や内容を見た感じ各値の意味は以下みたいな感じ また、設定値はリトルエンディアンで記載する

  • Version Information
    • 4byte の all0
  • Flags
    • 4byte の all0
  • Number of Mappings
    • エントリ数 ( nullエントリを含む )
    • 設定内容 ( キーマップの変更 ) のエントリ数 + 1 ( nullエントリ )
  • Individual Mapping
    • 設定内容
  • Null Terminator
    • 4byte の all0

サンプルなどは Hardware Dev Center Keyboard and mouse class drivers にあるので設定内容全体への詳細記法は省略する

Individual Mapping に関して

この項目は以下の手順で作成していけばいい

  • キーボード上のキーを何と入力したいかを決める
    • 今回は既出リンク内のサンプルにもある CAPS LOCK --> Left CTRL key で記載する
  • これをキーコードに直す
    • CAPS LOCK0x3A
    • Left CTRL key0x1D
  • 変更したい内容をキーコードで表すと 0x3A --> 0x1D
  • 上記のキーコードでは 1byte + 1byte = 2byte なので各種設定値の頭に all0 の 1byte を付与して Individual Mapping のバイト数 ( 4byte ) に合わせる
    • 0x003A --> 0x001D ( 2byte + 2byte = 4byte )
    • 今回は変更したいキーのコードが 1byte だったので頭に0埋めしたが、もともと2byteの場合は0埋め不要
  • 上記より作られた値は 0x003A001D
  • これをリトルエンディアンにする
    • 設定値は 0x1D003A00 となる
  • この値が Individual Mapping ( レジストリエディタに入力するときは 0x 無しで 1D003A00 と入力できた )

キーコードに関しては Microsoft Download Center からdoc形式のドキュメントでダウンロードできる ( 検索したところダウンロードリンクしか見つからなかったが、本記事執筆時現在以下のキーワードで検索すると上位に出てきた ) Keyboard Scan Code Specification - Microsoft Download Center

参考

macOSでbashをアップデートする

概要

  • macOSbashのバージョンは3.x系から更新されていない ( macOS 10.15.5 )
  • macOSのログインシェルにbashを使用し続けると、以下のようなコメントが表示される
    • このコメントを消すには BASH_SILENCE_DEPRECATION_WARNING1 を設定すればいい
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
  • コメントを消すことでも今まで通りにつかそうだが、バージョンが古いことなどもあるので、新しいバージョンを使用する
    • brewなどからも新しめのbashをインストールできるみたいだが、今回はソースコードからビルドして利用する

必要なもの

  • c言語をビルドすることのできる環境

ソースコードの取得ととインストール

GNUのページ のダウンロード欄からリンクに飛び、バージョンを選んでダウンロードする

tar.gz のファイルを入手できるので解凍する

$ tar zxvf bash-5.0.tar.gz

解凍されたディレクトリに移動してビルドしてテスト、インストールする

$ ./configure
$ make
$ make tests
$ make install

installが完了すると以下のコマンドでバージョンを確認できるようになる

$ /usr/local/bin/bash --version
// インストールしたバージョンが表示される

デフォルトシェルの変更

/etc/shells にこのpathを追加する

sudo sh -c "echo '/usr/local/bin/bash' >> /etc/shells"

デフォルトのログインシェルを変更する

$ chsh -s /usr/local/bin/bash

参考記事

https://qiita.com/key-amb/items/d053ed80590697435650 https://qiita.com/bo-san/items/1b920793aff499667011

Raspberry Pi でPWM信号を使って5Vファンを制御する

Raspberry Pi でPWM信号を使って5Vファンを制御する

自作PCで使うような4pinファンを動かすのではなく、2pin(VDDとGND) ファンを制御するという内容です。

Raspberry Pi でPWM信号使ってLEDの明るさを変更する でPWM信号を使ってLEDを点灯させた。 Raspberry Pi のPWM出力電圧(3.3V) では5Vファンの入力電圧(5V) には届かないため、GPIOの5V電源をトランジスタで制御し、PWM信号として使用した。

部品類

回路図と配線

f:id:shogysd:20210405003540p:plain f:id:shogysd:20210405003551p:plain

PWMを出力するコードを書く

ほとんどLEDの時と同じ 差分としては、LEDの時は10%の出力と100%を繰り返した ( for i in [10, 100, 10, 100]: ) が、 今回使用したファンは10%の出力では始動電力に届かなかったようで動き始めなかったため、20%に変更した ( for i in [20, 100, 20, 100]: ) 。

import RPi.GPIO as GPIO
import time


def main():

    frequency = 200
    repeat_count = 600
    gpio_pin = 18

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(gpio_pin, GPIO.OUT)

    for i in [20, 100, 20, 100]:
        
        if 0 == i:
            on_time = 0
            off_time = (1 / frequency)
        else:
            on_time = (1 / frequency) * (i / 100)
            off_time = (1 / frequency) * (1 - (i / 100))

        for rc in range(repeat_count):
            GPIO.output(gpio_pin, True)
            time.sleep(on_time)
            GPIO.output(gpio_pin, False)
            time.sleep(off_time)
            
    GPIO.cleanup()


if __name__ == '__main__':
    main()

Raspberry Pi では "vcgencmd" というコマンドでCPU温度などの情報を取得することが可能なようなので、 ○○°Cを超えたらファンの出力を××%に などできそう。

参考記事

RaspberryPiのCPU情報をPythonで取得する

Raspberry Pi でPWM信号使ってLEDの明るさを変更する ( software pwm )

Raspberry Pi でPWM信号使ってLEDの明るさを変更する

※ software pwm

PWM信号

周期的にオンとオフが切り替わる信号で、1波長の中でのオンの時間とオフの時間の割合を調整するで、 一連の流れの中での出力を変更できる信号

f:id:shogysd:20210405002748p:plain f:id:shogysd:20210405002808p:plain

Raspberry Pi とLEDを接続する

今回はたまたま家にあった赤色LEDをつかった。 電圧は Raspberry Pi からのPWMの3.3Vで足りるため、アノードにそのまま接続。 ( 今回は18番のPINを使用 ) f:id:shogysd:20210405002828p:plain f:id:shogysd:20210405002839p:plain

PWMを出力するコードを書く

  • 以下のコードでは、10%の出力と100%の出力を約3秒ごとに2回繰り返す
import RPi.GPIO as GPIO
import time


def main():
    frequency = 200
    repeat_count = 600
    gpio_pin = 18

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(gpio_pin, GPIO.OUT)

    for i in [10, 100, 10, 100]:
        if 0 == i:
            on_time = 0
            off_time = (1 / frequency)
        else:
            on_time = (1 / frequency) * (i / 100)
            off_time = (1 / frequency) * (1 - (i / 100))

        for rc in range(repeat_count):
            GPIO.output(gpio_pin, True)
            time.sleep(on_time)
            GPIO.output(gpio_pin, False)
            time.sleep(off_time)

    GPIO.cleanup()


if __name__ == '__main__':
    main()

Raspberry Pi の起動メディアを作成する (Raspbian のイメージを microSD に書き込む)

後日追記

現在は Raspberry Pi Imager なる道具が公式で公開されていてそれを使うのがよさそう www.raspberrypi.org

Raspberry Pi の起動メディアを作成する

一言で言うと

ただのメモ

環境

LinuxmacOS (macOSでのコマンドを貼っているので、Linuxの場合は適宜読み替える必要あり)

作業内容

Raspbianのイメージをダウンロードする

https://www.raspberrypi.org/downloads/raspbian/

ハッシュの確認と解凍

この記事を書いた時には SHA-256 だったので、以下のコマンドで同一の結果になるか確認しておく 問題なければ解凍

$ shasum -a 256 [ファイル名(zip)]
$ unzip [ファイル名(zip)]

書き込みなど

// ディスク名を探す (Raspbianを書き込むmicroSDを探す)
$ diskutil list

// アンマウント
$ diskutil unmountDisk /dev/disk3

// フォーマット
$ diskutil erasedisk FAT32 BOOT /dev/disk3

// フォーマットが終わると自動でマウントされたので、再度アンマウント
$ diskutil list
$ diskutil unmountDisk /dev/disk3

// 書き込み
// macOSでddしてるので、rdiskを使用している
sudo dd bs=1m if=[Raspbianのイメージ (img) へのPATH] of=/dev/rdisk3