2021年9月30日木曜日

[Debian]Awesome Window ManagerでCPUの稼働状況をカラフルに表示する

Debianを入れたASUS PN50はRyzen 4700Uで、CPUコアが8個ある。 Awesome Window Managerを使っているのだけど、それぞれのコアの稼働状況がカラフルに見られると楽しいのでスクリプトを書いてみた。
負荷が高くなるほど赤くなるようにした。 負荷をかけるとピコピコ表示が変わるので良い感じ。

ステータスバー

ソースはこちら。
Lua言語は初めて使ったので、rc.lua内で使われていたfunction, if, return くらいしか知らないのですごく冗長。

  vicious = require('vicious')
-- cpu widget
cpuwidget = wibox.widget.textbox()

function load_color(rate)
    local color
    if rate >= 80 then
        colro = "#FF0000"
    elseif rate >= 70 then
        color = "#FF4000"
    elseif rate >= 60 then
        color = "#FF8000"
    elseif rate >= 50 then
        color = "#FFBF00"
    elseif rate >= 40 then
        color = "#FFFF00"
    elseif rate >= 30 then
        color = "#BFFF00"
    elseif rate >= 20 then
        color = "#80FF00"
    elseif rate >= 10 then
        color = "#40FF00"
    else
        color = "#0000FF"
    end
    return color
end

function load_html(rate)
    local color = load_color(rate)
    return string.format('<span bgcolor="%s">%d</span>', color, rate)
end

vicious.register(cpuwidget, vicious.widgets.cpu,
                 function(widget, args)
                     local all = args[1]
                     local cpu1 = args[2]
                     local cpu2 = args[3]
                     local cpu3 = args[4]
                     local cpu4 = args[5]
                     local cpu5 = args[6]
                     local cpu6 = args[7]
                     local cpu7 = args[8]
                     local cpu8 = args[9]
                     return string.format('<span color="#cccccc"> | </span>CPU <span color="#cccccc">%s (%s %s %s %s %s %s %s %s)</span><span color="#cccccc"> | </span>',
                                          load_html(all),
                                          load_html(cpu1), load_html(cpu2), load_html(cpu3), load_html(cpu4),
                                          load_html(cpu5), load_html(cpu6), load_html(cpu7), load_html(cpu8))
                 end)
  

2021年9月29日水曜日

[Debian]xrdpでキーボードレイアウトが日本語になってしまう

引き続きASUS Mini PC PN50 (Ryzen 4700U)にDebianをインストールして環境構築中。

HHKBを使っているが、xrdpを利用しリモートデスクトップで接続した場合に、キーボードのレイアウトが日本語(jp)になっていた。

次のコマンドで英語(us)レイアウトに変更できるが、リモートデスクトップに接続しなおすと、jpに戻ってしまう。

$ setxkbmap -layout us

なんとかならんのかと、/etc/xrdp 配下を眺めてみると、reconnectwm.shがあり、コメントの通りにコマンドを追加したところ、再接続してもレイアウトはusのままとなった。

#!/bin/sh

# Write procedures here you want to execute on reconnect

setxkbmap -layout us 

これで解決。


[Debian]xrdpでawesomeを利用できない

ASUS Mini PC PN50 (Ryzen 4700U)にDebianをインストールして環境構築中。

ディスプレイとキーボードを接続せずに、xrdpをインストールしてリモートデスクトップ経由で使えるようにした。

いつもWindow managerにはawesomeを利用しているので、今回もインストールしたのだけど、XFce4を先にインストールしたら、リモートデスクトップ経由では常にXFce4になり、awesomeを使うことができなくなってしまった。

$ sudo update-alternatives --install /usr/bin/x-window-manager x-window-manager /usr/bin/awesome 70

でXFce4よりも優先度を上げてみたりしたが切り替えることができなかった。

仕方がないので/etc/xrdp配下のファイルを眺めていたら、startwm.shなるファイルを発見。
このファイルの下のほうを次のように awesome固定で起動するようにしたら、awesomeが使えるようになった。

/etc/xrdp/startwm.sh

# comment out (2 lines)
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession

# add
if test -r $HOME/.xsessionrc; then
	. $HOME/.xsessionrc
fi
exec /usr/bin/awesome

いったんはこれで良し。


2021年9月25日土曜日

[Emacs]#BEGIN_SRC,#END_SRCを入力するELisp

 org mode使っていて、コードを囲う#BEGIN_SRC,#END_SRCをいちいち入力するの面倒だなと思っていたのだけど、数年越しでやっとつくった。さっさと作っておけば良かった。

何てことないコードだけどペタっとな。

(defun org-util-insert-source-section ()
  (interactive)
  (beginning-of-line)
  (insert "#+BEGIN_SRC\n")
  (insert "#+END_SRC\n")
  (forward-line -1))

(global-set-key (kbd "C-x 5 s") 'org-util-insert-source-section)

コードの通り、C-x 5 s に割り当てた。


2021年9月20日月曜日

[OCaml]merlinが参照するcmiファイルの自動更新

OCamlの開発環境として Emacs + Merlin + Tuareg を使用しているが、自ファイル以外のモジュールを参照するためには、cmiファイルを生成しなければならなかった。

dune を使用していれば、プロジェクトディレクトリ配下で

$ dune build @check

を実行すれば生成されるのだけど、ファイルの更新でいちいちこれを実行するのは面倒なのでスクリプトを作成した。

Linuxはファイル更新の検知に inotifywaitコマンドがあるのでそれを利用した。
inotifywaitコマンドはinotify-toolsパッケージにあるのでインストールしておく。

$ sudo apt install inotify-tools

スクリプトはこちら。

dune_build_check.sh

#!/usr/bin/env bash

# for test
#set -euo pipefail

USAGE(){
    echo "usage: dune_build_check.sh <dir>"
    exit 1
}

[ "$#" -eq 0 ] && USAGE >&2

cd "$1"

while : ; do
    result=$(find -type f -name '*.ml' -o -name '*.mli' | xargs inotifywait -q -e modify)
    if [ $? -eq 0 ]; then
        echo "$result"
        dune build @check
    fi
done

duneコマンド実行後に、再度、監視対象とするmlファイル、mliファイルを取り直しているので、新規ファイル追加時は既存ファイルを一度編集すればよい。

自動でやってくれるようなオプションがduneにありそうに思ったが無さそうだった。

参考

2021年9月12日日曜日

[AutoHotkey][VMware]VMware Workstation Playerのウィンドウサイズの自動調整

Remote Desktop経由で使っているせいなのか、VMware Workstation Playerのウィンドウの変更で枠を捕むのが非常にシビアでウィンドウサイズの変更に手間取っていた。

スクリプト一発でサイズ変更できないものか?と、こういう類の処理はAutoHotkeyでいけるかなーと思って調べてみたら、簡単だった。

(1)AutoHotkeyをここでダウンロードする。

(2)次のスクリプトをファイル名vmware_resize.ahkで任意の場所に保存する。

WinMove ahk_class VMPlayerFrame,,110,33,1500,1300
ExitApp

(3)VMWare Workstation Playerを起動後、ダブルクリックするなりして(2)のスクリプトを実行する。

WinMove命令の第一引数ではウィンドウのクラス名を指定している。
AutoHotkeyにはウィンドウ情報を調べるWindowSpy.ahkが付属しているので、それを使って調べるとよい。

参考