Archive for the “Uncategorized” Category

Fix tmux eating Ctrl+Tab/Ctrl+Shift+Tab

I have no idea why this happens, but on one of my machines, tmux swallows Ctrl+Tab and Ctrl+Shift+Tab. I have other machines, running the same tmux version and config, where this doesn’t happen. The only significant difference I’m aware of is that I access the other machines via SSH, but I’ve tried ssh localhost and […]

Running a script after updating a TLS certificate with certbot

This proved to be blessedly simple. As per the documentation, any executable in /etc/letsencrypt/renewal-hooks/deploy will be run after a certificate was successfully renewed (may need to be owned by root). This worked first time: #!/bin/bash   cp -L /etc/letsencrypt/live/<domain>/{fullchain,privkey}.pem /etc/exim4/ chown Debian-exim:Debian-exim /etc/exim4/{fullchain,privkey}.pem systemctl restart exim4#!/bin/bash cp -L /etc/letsencrypt/live/<domain>/{fullchain,privkey}.pem /etc/exim4/ chown Debian-exim:Debian-exim /etc/exim4/{fullchain,privkey}.pem systemctl restart […]

Setting IO scheduler for use with ZFS

If you’re using rotational hard drives, Linux’s default IO scheduler can interact very badly with ZFS’s IO scheduler, greatly reducing performance. This is further exaggerated if you have any SMR devices due to their pathological worst-case performance characteristics. I’ve found that switching to “none” (this was called “noop” historically) can improve performance by a full […]

Fixing emails from Nextcloud via Debian’s default exim setup

At some point, my Nextcloud quietly stopped being able to send email. This is currently Nextcloud 27.1.3, running in docker on Debian 11.8, but it might have been broken for some time. When setting up exim on Debian, debconf asks you a few questions and generates a default config. My setup has no other deviations […]

Setting ‘User Cannot Change Password’ using Python

Adding users manually to Active Directory can be a chore, especially if you have a lot of users to add and/or you need to remember to set several options. Fortunately AD is readily scriptable. I generally use Python for this purpose, and there are numerous examples for how to do things like add a new […]


This is the new computer case I received in the post today: Alongside the box it came in: And the box that came in:

ZFS: One or more devices has experienced an unrecoverable error

I’m using ZFS (via ZFS-FUSE), and at one point a zpool status gave me this rather scary report: zpool status pool: srv state: ONLINE status: One or more devices has experienced an unrecoverable error. An attempt was made to correct the error. Applications are unaffected. action: Determine if the device needs to be replaced, and […]

A Visual Git Reference

This page gives a good visual overview of numerous Git operations. If you understand Git in principle, but are unsure about the exact meaning of certain commands, then this may be useful; for each operation covered it gives a description and a block diagram of how it changes the state of the repository. If you’re […]


This graphical Python shell appears to be an excellent tool for interactive Python use, possibly supplanting IPython. From the announcement: * Has whatever you would expect from a graphical Python shell – attribute completion, tooltips which show how to call functions, highlighting of matching parentheses, etc. * Fixes a lot of IDLE nuisances – in […]

Automating Debian security updates

Thanks to ‘foom’ on LWN, comes a neat recipe for automatically installing critical updates on a Debian system with minimal risk: It’s explained in some detail, but in brief it uses (optionally) a separate sources.list into which you can put only critical sources, and makes dpkg/apt choose the default responses to any questions. Fortunately […]