「OS」の版間の差分

提供:senooken JP Wiki
(cron)
985行目: 985行目:


これで日本語が使用可能になる。
これで日本語が使用可能になる。
===== cron =====
[https://stackoverflow.com/questions/37458287/how-to-run-a-cron-job-inside-a-docker-container How to run a cron job inside a docker container? - Stack Overflow]
Docker内でcronを実行する方法がいくつかある。


== Other ==
== Other ==

2024年10月22日 (火) 17:51時点における版

パソコンのOSごとの記録。

iOS

Settings

Keyboard

[Settings]-[General]-[Keyboards] が設定項目。

Gboard

スマホの日本語入力 目からウロコの楽々ワザとは? | NIKKEIリスキリング

iOS版のGboardはAndroid版と異なり機能が劣る。標準キーボードを使ったほうがいいらしい。

Space

ASCII.jp:iPhoneで常に半角スペースを入力できるようにする方法

  • [ALL KEYBOARDS]-[Smart Punctuation]=On: Off推奨。
  • [KANA]-[Smart Fullwidth Space]=On: =Off推奨。

これで常に半角スペース入力になる。

瞬間切替

iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞

英語キーボードで1文字だけ数字や記号を入力したいことがある。

その場合、[数字切替] キーをドラッグしたまま、入力したいキーで離す。すると、数字や記号を1文字だけ入力して、英字モードに戻る。切替の手間が省けて楽。

Other

iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞

  • [ALL KEYBOARDS]-[Auto-Punctuation/自動大文字入力]=On: Off推奨。英語キーボード切替時に先頭が自動で大文字になる機能。英語圏の人なら便利だが非英語圏なら邪魔。
  • [ALL KEYBOARDS]-[Auto-Correction]=On: Off推奨。一般的な綴でない場合、誤入力と判断され、変換のデフォルトが修正候補になる。
  • [ENGLISH]-["." Shortcut]=On: On推奨。英語キーボードには.がない。これがオンだと、スペースのダブルタップで.を入力できる。

Network

テザリング

出典:

無通信状態が90秒ほどしばらく続くと省電力設計のため、自動的にオフになる。これが困る。Andriodは自動オフにはならない。

いくつか対策がある。

  1. [Personal Hotspot] (インターネット共有) 画面の表示を維持。自動ロックも解除しておく。
  2. USB/Wi-FiではなくBluetooth経由にする。⇢Bluetooth接続はMontary以上で不能。

Bluetooth経由のほうが、範囲が短く、電力消費量も抑えられるので、Bluetoothがよさそう。他にはUSB接続。

Bluetooth接続はできなくなっているので、画面表示か通信しておくしかない。

Instant Hotspot

出典:

Bluetoothでのテザリングはできないものの、類似機能のInstant Hotspotで実現できるらしい。

いくつか条件がある。

  • iPhone/iPadでインターネット共有 (Personal Hotspot) 対応。
  • 全デバイスで同じApple IDでiCloudにログイン。
  • 全デバイスでBluetoothオン。
  • Wi-Fiオン.

[Personal Hotspot]-[Allow Others to Join] をオンにしなくても自分だけ接続できるのが利点。逆にいうとこれくらい。Bluetoothをオンにしないといけないぶん、余計な通信処理が入る。使わなくていい。

Bluetooth

出典:

MacS v12.1 (Monterey) からiOSでのBluetooth接続が不能になった。

Wi-FiかUSBで接続する。実務的には困らないはず。

Sound

出典: iPhoneの音量を調整する - Apple サポート (日本)

音量は左サイドボタンで上下できる。左上のスイッチがマナーモードの切替になっている。消音モードと呼んでいる。

Mail

複数アカウントを使いこなす、iPhoneメールアプリの知られざる便利機能 | 日経クロステック(xTECH)

iPhoneのメールアプリは標準のMailを使うのがよいだろう。K-9がないから。複数アカウントにも対応しているが、設定が若干特殊。アプリ設定からではなく、iOS本体の設定から行う。

App

いくつか必要なアプリがあるので整理する。

Switcher

出典: iPhoneで開いているアプリを切り替える - Apple サポート (日本)

アプリスイッチャーという機能で、現在実行中のアプリを変更可能。Androidはホームの上スワイプ、右ボタンだった。iOSはホームのダブルクリック。

KeePass

パスワード管理アプリ。iOSは別になる。KeePass XCはQtを使っているからビルドできるはずなんだけど。

iOS 向けの Keepass クライアントの備忘録 | hyt adversaria」を見る限り、KeePassiumが良さそう。

Camera/Video

Camera

出典: iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室

iPhoneのデフォルトのカメラは解像度が高すぎて写真のファイルサイズがかなり大きい。変更できない。せいぜいインカメラで撮影するくらい。

LINE Cameraが定番のカメラアプリらしい。こちらは解像度を柔軟に設定できる。

[Settings]-[Saving]-[Resolution]-[Medium] に変更。これでデフォルトの半分になる。

iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室」はもっと小さい。こちらがいいだろう。

Low Cameraはもっと小さいが、小さすぎて細かい文字が見えなくて困る。調べた。

2024|無音カメラアプリおすすめランキング11選|無料|高画質 | Good!Apps」が参考になった。

Simple Camがよかった。基本はこの1.2MPか0.3MP。外観だけでいいならLowCameraとか。

rank OS name url Free level MP resolution px size KB square 備考
4 iOS LowCamera Very Low 0.05 144x144 25 x
4 iOS LowCamera Low 0.1 360x360 50 x
4 iOS LowCamera Medium 0.2 480x480 100 x 画質が低すぎる。
4 iOS LINE Camera Medium 2 1512x1512 1024 x 画質をもう少し落としたい。
2 iOS 低画質カメラ - 動画のみ。
3 iOS 0.3MPCamera 480x640 - いまいち。正方形がない。
3 iOS 0.3MPCamera 240x320 - いまいち。正方形がない。
3 iOS 0.3MPCamera 120x160 - いまいち。正方形がない。
3 iOS default Photo 12 3024x4032 2300 x
3 iOS default Photo 9 3024x3024 2600 x
3 iOS Capera Max 12 3024x4032 2300 - 正方形がない。
3 iOS Capera FullHD 1920x1080 -
3 iOS Capera HD 1280x720 -
3 iOS Capera VGA 640x720 -
3 iOS Capera CIF 352x288 -
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 192x144 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 352x288 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 480x360 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 640x480 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 960x540 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 1280x720 - 正方形がない。
5 iOS Simple Cam 0.3 480x480 100 x 必要な範囲を網羅できている。
5 iOS Simple Cam 1.2 960x960 200 x 必要な範囲を網羅できている。
5 iOS Simple Cam 1.9 1200x1200 300 x 必要な範囲を網羅できている。
5 iOS Simple Cam 5 1936x1936 800 x 必要な範囲を網羅できている。
5 iOS Simple Cam 8 2448x2448 1500 x 必要な範囲を網羅できている。
5 iOS Simple Cam 12 x 必要な範囲を網羅できている。
3 iOS MiraCamera 9 3024x3024 2700 x いまいち。
3 iOS Foodie standard 3 1920x1920 1600 x いまいち。
3 iOS SODA standard 3 1920x1920 1800 x いまいち。
2 iOS Pro Camera - x
1 iOS Q Camera x -
1 iOS AutoCam x -
2 iOS SkyCamera 0.8 750x1000 -
2 iOS StageCamHD 1280x720 x
2 iOS StageCamHD 1920x1080 x
2 iOS StageCamHD 3024x3024 x
2 iOS StageCamHD 2592x1936 x
2 iOS StageCamHD 3264x2448 x
2 iOS BeautyPlus x
Video

標準のカメラアプリで正方形の動画の撮影方法。photoで正方形にして、撮影ボタン長押しで正方形で動画撮影可能。右にスライドでモードロックとのこと。

カメラアプリの設定で、 [Preserve Settings]-[Creative Controls] でデフォルト正方形を維持できる。

Record Square Format Videos on iPhone with These Apps

動画撮影アプリのおすすめ人気ランキング【2024年】 | マイベスト

正方形の動画撮影アプリ。

Clips

Apple純正の動画作成ソフト。

Favorite

写真も動画も基本はFILTISTでOK。ただし、ズーム不能なので、ズーム時だけ別アプリを使う。

  • LISTIST=動画・写真=720x720ズームなし。
  • MONOV=動画720x720ズーム。
  • Simple Cam=写真ズーム。

通常はLISTISTで動画も写真も撮影。ズームが必要な場合だけ、MONOV/Simple Cam。

ズーム用を1アプリで対応できればよかったのだが、うまいのがない。LINE Cameraが近かったのだけど、動画が最大30 s。惜しかった。しかたない。

LINE Camera

正方形で写真と動画に対応。サイズも大きすぎない。ズームも対応。ただし、動画は30 sまで。これが惜しい。

QR

Ref: QRコードで開いたWEBサイトの履歴がiPhoneで残らない問題、これで解決 | マイナビニュース.

QRコードを読み取ると、QRコードリーダーアプリ内ブラウザーで開けれて、Safariの履歴に残らない。開いた後に、右下でSafariで開き直すと、タブで開き直せる。基本はすぐ開き直したほうがいい。

いや、標準のQRコードリーダーで開いた後に、Safariで開き直すと、状態が違うのか、吉野家のレシートアンケートなどはエラーになる。サードパーティーアプリを使ったほうがいい。

QRコードアプリおすすめ2選&ランキングTOP10 無料・人気のアプリを編集部が厳選!【2024年】 | iPhone/Androidアプリ - Appliv

QRQRがいい。

Windows

Other

高速スタートアップ

出典:

電源オフにしているのに、バッテリーが何故か減っている。原因は [高速スタートアップ] とのこと。

[コントロールパネル]-[ハードウェアとサウンド]-[電源オプション]-[電源ボタンの動作を選択する]-[現在利用可能ではない設定を変更します]-[シャットダウン設定]-[高速スタートアップを有効にする (推奨)] をオフにする。

勝手にスリープする

システムがすぐにスリープしてしまうのは、「システム無人スリープタイムアウト(System unattended sleep timeout)」機能が働いているためだと考えられる。これは、システムがWOL(Wake On LAN)や何らかのイベントなどで、自発的にスリープから起動した場合、そのまま何も操作せずに放っておくと、一定時間後にまた自動的にスリープ状態に移行するための機能である。

 システム無人スリープのタイムアウトを設定する項目を有効化するには、コマンドプロンプトで以下のpowercfgコマンドを実行すればよい。再起動などは必要なく、[電源オプション]にタイムアウトを設定する項目が表示される。

powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE

これだとダメ。

一応元に戻す。

powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 +ATTRIB_HIDE

Windows10で勝手にスリープになる現象を防ぐための対処法 | TechMemo

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0

このレジストリーの値を0から2に変更する。

システム無人スリープタイムアウトが表示されるので0にするとなくなる。らしい。

そのほか、ディスプレイの電源を切るのはやはりだめ。パソコンの省エネ機能が働いて、処理が止まる。

Startup

Microsoft TeamsなどOSの起動時に勝手に自動起動するアプリがある。制御する方法がいくつかある。

[設定]-[アプリ]-[スタートアップ] で制御できる。大半はこれで制御できる。

ほかに、Explorerのshell:startupか%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupにショートカットがあると、それでも自動起動する。

録音

Windows10で録音がしたい!ボイスレコーダーを使用した音声の録音方法を解説

プレインストールのボイスレコーダーで録音できる。

Theme

Ref: デスクトップのテーマを変更する方法<Windows 11>|サポート|dynabook(ダイナブック公式).

OSのテーマでデフォルトのライト・ダークが決まる。

[スタート]-[設定]-[個人用設定]

Hardware

Keyboard

Ref: FMV Q&A - [Windows 11 キーを押し続けたときに、同じ文字が連続して入力される速度を調整する方法を教えてください。 - FMVサポート : 富士通パソコン].

[コントロールパネル]-[キーボード]

Mouse

[コントロールパネル]-[マウス]

  • ポインター オプション
    • ポインターの速度を選択する (デフォルト=左から6 (6/11))
    • ☑ポインターを自動的に既定のボタンの上に移動する。
    • ☑Ctrlキーを押すとポインターの位置を表示する。

コントロール パネル\すべてのコントロール パネル項目\コンピューターの簡単操作センター\マウスを使いやすくします

  • マウスポインター

Explorer

[フォルダーオプション]-[表示]

  • ファイルおよびフォルダー
    • ☑チェックボックスを使用して項目を選択する。
    • ファイルとフォルダーの表示
      • ☑隠しファイル、隠しフォルダー、および隠しドライブを表示する。
      • □登録されている拡張子は表示しない

Mac

System

Mouse

マウスポインター速度 macデフォルト4/10。

Applications

Macの実行ファイルは.appファイル。これは/Applicationsに配置されている。Laucnhpadはこのディレクトリー内を表示している模様。

lanchctl

Macでシステム起動時の処理を管理する仕組み。Mac OS 10.10以上で導入されている。

GUIなど、システムグローバルで環境変数を反映させたい場合、ここに登録する必要がある。

plistファイルを作成して、それをlanchctl loadして登録になる。unloadで解除になる。

  • plistのファイルのパスは、主に以下2通り。
    • /Library/LaunchAgents/*****.plist : システム全体で有効になる。
    • ~/Library/LaunchAgents/*****.plist : ログインユーザのみで有効になる。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
  <key>Label</key>
  <string>setenv.M2_HOME</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>setenv</string>
    <string>M2_HOME</string>
    <string>/usr/local/Cellar/maven31/3.1.1/libexec</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>

上記のような形式。

配置したら、コマンドで即座に反映できる。

launchctl load ~/Library/LaunchAgents/SSLKEYLOGFILE.plist 

値を修正した場合、一度unloadしてからloadする。

VM

UTM

Control

Capture

Controls | UTM Documentation

デフォルトだと、Control-Tabなど、一部のMac本体のホットキーが有効になっている。例えば、Windows側でc-tabを入力できなくて困る。

4番のボタンまたは、control-optionで、カーソルとキーボードをVMでキャプチャーする。これで入力可能になる。

Docker

Network

docker network ls

上記コマンドでコンテナーごとのネットワーク識別子を確認できる。コンテナー同士で同一ネットワークにするには、片方のservices.networks:でこのネットワーク識別子を指定する。

Compose

phpのアプリサーバー、DBサーバーを一つのイメージで作ることもできるが、別のイメージにして連動させることもできる。別のイメージ・コンテナーにしたほうが、管理しやすい模様。

docker composeで複数のイメージ・コンテナーを一体に管理できる。その際に、特有の事項がある。

PHPのPDOをDockerコンテナ内で使おうとしたところ、"No such file or directory" エラーが発生した話 #docker-compose - Qiita

docker composeで一体管理しているコンテナー群は、同一ネットワークに参加する。ホスト名はservice名になる。したがって、例えばアプリサーバーからDBサーバーへのアクセス時には、ホスト名に注意する。

Image

PHP

Ref: php - Official Image | Docker Hub.

Dockerの公式PHPイメージを使う場合、いくつかPHP関係のライブラリーや拡張モジュールをインストール・設定するための専用コマンドが用意されている。

RUN pecl install memcached-3.2.0 \
	&& docker-php-ext-enable memcached

peclの拡張機能インストール時はバージョン指定が推奨される。

docker-php-ext-install

Docker で PHP 拡張モジュールをインストールする | QUARTETCOM TECH BLOG

PHP拡張モジュールのインストールと設定を行うヘルパーコマンドが用意されている。--helpで対象拡張モジュール一覧を確認できる。

$ docker run php:latest docker-php-ext-install --help

# .....
Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dl_test dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell random readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlwriter xsl zend_test zip
# .....

PECL以外は一通り使用可能。

error

docker-php-ext-installでインストールする際には、必要な依存関係もセットで指定しないとエラーが出る。

FROM php:7.3.23-apache
RUN apt update
RUN docker-php-ext-install pdo_mysql
RUN apt install -y libbz2-dev && docker-php-ext-install bz2
RUN apt install -y libpng-dev && docker-php-ext-install gd
RUN apt install -y libzip-dev && docker-php-ext-install zip
RUN apt install -y ssl-cert && a2enmod rewrite ssl && a2ensite default-ssl
COPY --from=composer /usr/bin/composer /usr/bin/composer

ヘッダーのあるlib*-devもセットでインストールしておく。

phpmyadmin

Ref: phpmyadmin - Official Image | Docker Hub.

以下のdocker-compose.ymlを格納しておいて、networksのところをつなげたいやつにあわせる。

services:
  phpmyadmin:
    image: phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_ARBITARY=1
    networks:
      - development_default
        # - wordpress_default
networks:
  wordpress_default:
    external: true
  development_default:
    external: false

特に重要な環境変数。

  • PMA_ARBITRARY - when set to 1 connection to the arbitrary server will be allowed
  • PMA_HOST: デフォルトはdb。servicesがdb以外なら指定必要。
  • PMA_USER/PMA_PASSWORD=phpmyadminのデフォルトユーザー。これを指定しておくと、自動ログインする。
MySQL
import

Ref: Import data.sql MySQL Docker Container - Stack Overflow.

docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql

上記のようなコマンドで取り込む。

Error

connect ENOENT \\.\pipe\errorReporter

https://github.com/docker/for-win/issues/14080

再起動で直るらしい?

インストール時のアカウントの権限があるので、アカウント権限がある状態で再インストールするとOK。

`version` is obsolete

【docker compose】警告`version` is obsoleteの解決法

$ docker compose up
time="2024-07-02T09:54:45+09:00" level=warning msg="C:\\Users\\senoo_0901\\project\\main\\GASProj\\docker\\docker-compose.yml: `version` is obsolete"

docker compose v2からversion指令は廃止になった。単純に削除すればいい。

Other

RUN/CMD/ENTRYPOINTの違い

【Docker】Dockerfileで記述するRUNとCMDとENTRYPOINTの違いについて - 自由気ままに書いちゃおう

Dockerfileでコマンドを実行する指令が複数ある。違いを整理する。

  • RUN: イメージ作成時=docker build字に実行。ソフトウェアのパッケージインストール、ファイルコピー変更などを行う。
  • CMD: コンテナ開始時=docker start、作成時=docker run時に実行される。docker run時のコマンドのデフォルト値。VolumeのバインドはRUN後になるのでCMD/ENTRYPOINTで行う必要がある。
  • ENTRYPOINT: コンテナ開始時=docker start、作成時=docker run時に実行される。docker run時に強制実行。上書き不能。
権限設定

Apache HTTP Serverの/var/wwwの権限設定 | GNU social JP Web

Why does chown not work in RUN command in Docker? - DevOps Stack Exchange

バインドボリュームする場合、RUNの後にバインドされるからCMDで設定が必要。

DockerfileにENTRYPOINTもCMDも無い?? | へるぷログ

CMD/ENTRYPOINTを指定しない場合、元イメージのCMD/ENTRYPOINTが実行される模様。apacheだとapache2-foregroundコマンド。

docker-composeでコンテナの初回起動時に特定の処理を行う方法 #Docker - Qiita

初回起動時に処理をする方法もあるが、一時ファイルを生成するなどするもの。権限設定は毎回実行してもOKなものなので、毎回実行する。

umask for non-root users not as expected · Issue #1142 · docker-library/php

/root/.bashrcにumaskを指定する。これがないと、コマンドラインでdocker exec -i で実行した際デフォルトのumask 022でのファイル生成になり、この作業コマンドでログが発生したら、サーバープロセスから追記できない。

FROM php:7.3.23-apache
RUN apt update && apt install -y \
      ssl-cert
RUN docker-php-ext-install pdo_mysql
RUN a2enmod rewrite ssl
RUN a2ensite default-ssl
COPY --from=composer /usr/bin/composer /usr/bin/composer

ENV BASH_ENV /root/.bashrc
RUN usermod -aG www-data root \
      && echo "umask 002" >>/root/.bashrc
CMD chgrp -R www-data /var/www && chmod 2775 /var/www \
      && find /var/www -type d -exec chmod 2775 {} \; \
      && find /var/www -type f -exec chmod 0664 {} \; \
      && apache2-foreground

dockerfile - Is it possible to set the default command when the `docker exec` command is run on an already running container? - Stack Overflow

docker exec実行時は、デフォルト実行されるコマンドはない。[Bash Startup Files (Bash Reference Manual)] にあるように、BASH_ENVに指定したファイルを非対話実行でも読み込むのでこれを指定して、常にbash -cで実行する。

あるいは、BASH_ENVを指定せずに、bash -c 'umask 002; 'で実行する。

他に上記にあるように、ENTRYPOINTでumaskを指定する方法がある。が、これは関係ない気がする。chomd 2775 /var/wwwでスティッキーを指定しているから、後続の作成時は自動で2775になっているはずだから。

docker runとexec

docker runとdocker execの違いの解説 | めもたんす

run: イメージ作成・実行。

exec: 起動中のイメージで実行。

Japanese input/日本語入力

OSに日本語のロケールが入っていないのが原因。

Debian系の場合。

## For Japanese input.
RUN apt install -y locales
RUN (rm /etc/locale.gen && sed '/# ja_JP.UTF-8 UTF-8/s/# //' >/etc/locale.gen) </etc/locale.gen
RUN locale-gen
ENV LANG=ja_JP.UTF-8

/etc/locale.genのファイルの修正が必要。

これで日本語が使用可能になる。

cron

How to run a cron job inside a docker container? - Stack Overflow

Docker内でcronを実行する方法がいくつかある。

Other

Keybind

App Menu

いわゆる右クリックのコンテキストメニュー。これをショートカットキーで実現する方法一応ある。

Macの場合。「Macの右クリック - Apple サポート (日本)」にあるように、Control-左クリックか、2本指クリック。

上記にあるように、F12でもできるらしい。ただし事前設定が必要。

[System]-[Accessibility]-[Pointer Control]-[Alternate pointer actions]=[on] にする。これでF12で開ける。右側のオプションボタンで変更もできる。

Key code

Mac

Ref: macos - Where can I find a list of Mac virtual key codes? - Stack Overflow.

以下のコマンドで一覧を確認できる (Mac v14.2.1、MacBook Air (M1, 2020)、 JIS配列)。

grep 'kVK_.*=' /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h

一覧。

  kVK_ANSI_A                    = 0x00,
  kVK_ANSI_S                    = 0x01,
  kVK_ANSI_D                    = 0x02,
  kVK_ANSI_F                    = 0x03,
  kVK_ANSI_H                    = 0x04,
  kVK_ANSI_G                    = 0x05,
  kVK_ANSI_Z                    = 0x06,
  kVK_ANSI_X                    = 0x07,
  kVK_ANSI_C                    = 0x08,
  kVK_ANSI_V                    = 0x09,
  kVK_ANSI_B                    = 0x0B,
  kVK_ANSI_Q                    = 0x0C,
  kVK_ANSI_W                    = 0x0D,
  kVK_ANSI_E                    = 0x0E,
  kVK_ANSI_R                    = 0x0F,
  kVK_ANSI_Y                    = 0x10,
  kVK_ANSI_T                    = 0x11,
  kVK_ANSI_1                    = 0x12,
  kVK_ANSI_2                    = 0x13,
  kVK_ANSI_3                    = 0x14,
  kVK_ANSI_4                    = 0x15,
  kVK_ANSI_6                    = 0x16,
  kVK_ANSI_5                    = 0x17,
  kVK_ANSI_Equal                = 0x18,
  kVK_ANSI_9                    = 0x19,
  kVK_ANSI_7                    = 0x1A,
  kVK_ANSI_Minus                = 0x1B,
  kVK_ANSI_8                    = 0x1C,
  kVK_ANSI_0                    = 0x1D,
  kVK_ANSI_RightBracket         = 0x1E,
  kVK_ANSI_O                    = 0x1F,
  kVK_ANSI_U                    = 0x20,
  kVK_ANSI_LeftBracket          = 0x21,
  kVK_ANSI_I                    = 0x22,
  kVK_ANSI_P                    = 0x23,
  kVK_ANSI_L                    = 0x25,
  kVK_ANSI_J                    = 0x26,
  kVK_ANSI_Quote                = 0x27,
  kVK_ANSI_K                    = 0x28,
  kVK_ANSI_Semicolon            = 0x29,
  kVK_ANSI_Backslash            = 0x2A,
  kVK_ANSI_Comma                = 0x2B,
  kVK_ANSI_Slash                = 0x2C,
  kVK_ANSI_N                    = 0x2D,
  kVK_ANSI_M                    = 0x2E,
  kVK_ANSI_Period               = 0x2F,
  kVK_ANSI_Grave                = 0x32,
  kVK_ANSI_KeypadDecimal        = 0x41,
  kVK_ANSI_KeypadMultiply       = 0x43,
  kVK_ANSI_KeypadPlus           = 0x45,
  kVK_ANSI_KeypadClear          = 0x47,
  kVK_ANSI_KeypadDivide         = 0x4B,
  kVK_ANSI_KeypadEnter          = 0x4C,
  kVK_ANSI_KeypadMinus          = 0x4E,
  kVK_ANSI_KeypadEquals         = 0x51,
  kVK_ANSI_Keypad0              = 0x52,
  kVK_ANSI_Keypad1              = 0x53,
  kVK_ANSI_Keypad2              = 0x54,
  kVK_ANSI_Keypad3              = 0x55,
  kVK_ANSI_Keypad4              = 0x56,
  kVK_ANSI_Keypad5              = 0x57,
  kVK_ANSI_Keypad6              = 0x58,
  kVK_ANSI_Keypad7              = 0x59,
  kVK_ANSI_Keypad8              = 0x5B,
  kVK_ANSI_Keypad9              = 0x5C
  kVK_Return                    = 0x24,
  kVK_Tab                       = 0x30,
  kVK_Space                     = 0x31,
  kVK_Delete                    = 0x33,
  kVK_Escape                    = 0x35,
  kVK_Command                   = 0x37,
  kVK_Shift                     = 0x38,
  kVK_CapsLock                  = 0x39,
  kVK_Option                    = 0x3A,
  kVK_Control                   = 0x3B,
  kVK_RightCommand              = 0x36,
  kVK_RightShift                = 0x3C,
  kVK_RightOption               = 0x3D,
  kVK_RightControl              = 0x3E,
  kVK_Function                  = 0x3F,
  kVK_F17                       = 0x40,
  kVK_VolumeUp                  = 0x48,
  kVK_VolumeDown                = 0x49,
  kVK_Mute                      = 0x4A,
  kVK_F18                       = 0x4F,
  kVK_F19                       = 0x50,
  kVK_F20                       = 0x5A,
  kVK_F5                        = 0x60,
  kVK_F6                        = 0x61,
  kVK_F7                        = 0x62,
  kVK_F3                        = 0x63,
  kVK_F8                        = 0x64,
  kVK_F9                        = 0x65,
  kVK_F11                       = 0x67,
  kVK_F13                       = 0x69,
  kVK_F16                       = 0x6A,
  kVK_F14                       = 0x6B,
  kVK_F10                       = 0x6D,
  kVK_F12                       = 0x6F,
  kVK_F15                       = 0x71,
  kVK_Help                      = 0x72,
  kVK_Home                      = 0x73,
  kVK_PageUp                    = 0x74,
  kVK_ForwardDelete             = 0x75,
  kVK_F4                        = 0x76,
  kVK_End                       = 0x77,
  kVK_F2                        = 0x78,
  kVK_PageDown                  = 0x79,
  kVK_F1                        = 0x7A,
  kVK_LeftArrow                 = 0x7B,
  kVK_RightArrow                = 0x7C,
  kVK_DownArrow                 = 0x7D,
  kVK_UpArrow                   = 0x7E
  kVK_ISO_Section               = 0x0A
  kVK_JIS_Yen                   = 0x5D,
  kVK_JIS_Underscore            = 0x5E,
  kVK_JIS_KeypadComma           = 0x5F,
  kVK_JIS_Eisu                  = 0x66,
  kVK_JIS_Kana                  = 0x68

Keyhac

About

Mac版はmac_portブランチ。

Mac

Mac版は英語サイト (craftware - Keyhac) からじゃないとダウンロードできないので注意する。

マニュアル: keyhac: User Manual

またWindowsと異なり、exeファイルと同じ場所のconfig.pyを読み込んだりはしてくれない。

$HOME/Library/Application Support/Keyhac/に配置する必要がある。

また、そもそもキーコード自体が異なるので、一部は専用に作る必要がある。

Base

config.py内にconfigure(keymap)関数を定義して、この中で設定を記述していく。

引数のkeymapにはKeymapオブジェクトが渡されるのでこれを操作することで設定する。

    keymap_global = keymap.defineWindowKeymap()

Keymap.defineWindowKeymapでWindowKeymapオブジェクトを返す。このオブジェクトに対してグローバルキーマップを定義していく。

これが基本。

基本的に全部文字列。キーコードを指定する部分は数値も可能だが、10進数の文字列にしておいたほうがいい。

Modifier

keymap.defineModifierで、Shift/Ctrlのように同時押しに意味のあるキー (modifier) を追加できる。

スペースの左右のキーにShift/Ctrl相当の機能をもたせる上で非常に重要。

# ユーザモディファイアキーの定義
keymap.defineModifier( 235, "User0" )

上記の例では235のキーコードにU0のモディファイアキーを設定している。U0はUser0の短縮表記。ただし、Windows専用。短縮表記は使わない方がいい。

Policy
  • スペースの左右のキー (Windows=変換/無変換、Mac=英数/かな) をモディファイアキーに追加。
  • LSS/RSSと表記 (Left Side Space/Right Side Space)
  • Ctrl/Cmd=CCと表記。
  • SpaceはCtrlのワンショットモディファイア。
  • LSS=Shift、RSS=U0、Space=CC。

hjklのVimのキー移動を定義したいから、RSSはU0。これは確定。

U0の操作にShiftを組み合わせたいことがあるからLSS=Shiftがいい。

キーの違いで、Windows/Macで共有と独立部分がある?