terminal emulator で評判のよい kitty を使ったとき、who, w, last で見ても擬似端末を使った記録が残らないため、libutempter (実際の記録をするのは utempter というSUIDされた実行ファイル)を使って記録するようにしました。FreeBSD の ports は、https://github.com/kdeguchi/ports/tree/master/x11/kitty に置いてあります。以下の patch は kitty-0.26.4 に対応しています。
--- kitty/child-monitor.c.orig 2022-10-17 02:48:51 UTC
+++ kitty/child-monitor.c
@@ -22,6 +22,7 @@
#include <sys/socket.h>
#include <sys/un.h>
#include <signal.h>
+#include <utempter.h>
extern PyTypeObject Screen_Type;
#if defined(__APPLE__) || defined(__OpenBSD__)
@@ -239,6 +240,7 @@ add_child(ChildMonitor *self, PyObject *args) {
return NULL;
}
#undef A
+ utempter_add_record(add_queue[add_queue_count].fd, NULL);
INCREF_CHILD(add_queue[add_queue_count]);
add_queue_count++;
children_mutex(unlock);
@@ -1185,6 +1187,7 @@ hangup(pid_t pid) {
static void
cleanup_child(ssize_t i) {
+ utempter_remove_record(children[i].fd);
safe_close(children[i].fd, __FILE__, __LINE__);
hangup(children[i].pid);
}
--- setup.py.orig 2022-10-19 17:45:56 UTC
+++ setup.py
@@ -528,6 +528,7 @@ def get_source_specific_defines(env: Env, src: str) ->
if src == 'kitty/parser_dump.c':
return 'kitty/parser.c', ['DUMP_COMMANDS']
if src == 'kitty/data-types.c':
+ env.ldflags.append('-lutempter')
return src, get_vcs_rev_defines(env, src)
with suppress(KeyError):
return src, env.library_paths[src]
コメント