ヘッドマウントディスプレイを使う事が多くなったため、その際には持ち歩いているMac Book Proを閉じた状態で使っている。このようにノートパソコンを閉じた状態で外部ディスプレイと繋いだ状態で作業する事をクラムシェルモードと言ったりする。
macOSは外部ディスプレイと電源を繋いだ状態であれば、ノートパソコンを閉じた状態でも使う事ができるし、電源に繋いだ状態でなくても pmset
コマンドを使う事で、スリープ状態を無効にして閉じた状態で使う事ができる。
僕は普段HHKBを使っていて、今まではMac Book Proのキーボードの上にHHKBを置いて作業をしていた。いわゆる尊師スタイルである。尊師スタイルは、時にHHKBの下にあるキーボードのキーを押してしまう事がある。僕はMac Book Proのキーボードを使わないから、これを無効にしたかった。クラムシェルモードで開発するのであればノートパソコンを閉じた状態で、その上にHHKBを置く事ができるので嬉しい。また、少しだけ作業をするような場合であれば、鞄から出す必要もない。これは案外、作業に取り掛かる心理的ハードルを下げる事ができた。そのため、クラムシェルの閉じた状態で作業をする事が多くなった。
しかし、これは良い面ばかりではない。簡単に想像できると思うけれど、熱がこもるのだ。mac bookは開いた状態で放熱できるようになっているため、閉じた状態ではパソコンの温度がどんどん上っていく。鞄の中に入れたまま作業をしていると、もっと熱がこもる。温度が高くなり過ぎると、パフォーマンスが悪くなったり、ハードウェア故障の原因となる。それが気になるのであれば、普通に開いて使えば良いのだけれど、やはり閉じたまま使う方が使い勝手が良い。そこで現在のCPUの温度をコマンドで調べる事にした。
macOSから取得可能なマシンの様々な状態は powermetrics
で取得できる。このコマンドは、オプションを指定する事でどのメトリクスを取得するかを指定でき、これらの詳細は powermetrics --help
で説明を読む事ができる。
今回はCPUの温度(つまりセンサーの値)を知りたい。どの種類の値を取得するかは --samplers
で指定でき、センサーの値の場合は --samplers smc
のように指定する。
sudo powermetrics --samplers smc
Fan: 3230 rpm
はファンの回転数を表しており、3230回/分のスピードで回転している事が分かる。
CPU die temperature
はCPUの温度で、摂氏76.59度であることを確認できる。
また、 --sample-rate
や --sample-count
を指定する事で、インターバルや取得回数を調整できる。
この温度は、どれぐらいまで高くても良いのか分からない。ただ現時点では、80度を越えると高負荷状態であり、90度を越えると危険域かなと考えていて、80度を越えるようならクラムシェルを諦めパソコンが冷却されやすいような使い方に切り替えるようにしている。
このチェックのための小さなユーティリティを実装した。
macos-cpu-temperature.el
;;; macos-cpu-temperature --- Show CPU Temperature on macOS -*- lexical-binding: t -*-
;; Copyright (C) 2024 TakesxiSximada
;; Author: TakesxiSximada <[email protected]>
;; Maintainer: TakesxiSximada <[email protected]>
;; Repository:
;; Version: 1
;; Package-Version: 20240529.0000
;; Package-Requires: ((emacs "29.0")
;; Date: 2024-05-29
;; This file is not part of Emacs.
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Code:
;;;###autoload
(defun macos-cpu-temperature ()
(interactive)
(async-shell-command
"sudo powermetrics --samplers smc --sample-rate 10000"
"*macOS: powermetrics CPU Temperature*"))
(provide 'macos-cpu-temperature)
;; macos-cpu-temperature.el ends here