[ids] * [main] # copilot key leftshift+leftmeta+f23 = rightcontrol # keep right ctrl as it is. keyd by default remaps it to left ctrl for some reason rightcontrol = rightcontrol
19 January 2026
The Lenovo IdeaPad 5 has a CoPilot where it should have
a Control Key.
The key simulates a combination of keys,
so normal ways of mapping the key
(udev/hwdb.d on Debian) do not work.
keyd can hook the key,
though,
and present another virtual keyboard device.
There are inexpensive USB adapters
that allow plugging a CW key or Iambic paddle
into the computer
for use with vBand
or other games.
The adapter presents as a keyboard,
and the paddles show up as additional Left and Right Ctrl keys.
If you are running keyd on the machine,
its default behavior of mapping Right Ctrl to be Left Ctrl
(which I guess lots of people find useful)
will interfere
and cause both sides of the paddle to trigger the same dit or dah.
Fortunately, we can undo this broken behavior to get the key working again.
Create /etc/keyd/default.conf:
[ids] * [main] # copilot key leftshift+leftmeta+f23 = rightcontrol # keep right ctrl as it is. keyd by default remaps it to left ctrl for some reason rightcontrol = rightcontrol
Restart keyd: systemctl restart keyd
After the mappings have been applied,
you can be observe it with evtest.
You’ll also see the key working in vBand.
I wouldn’t have needed keyd if it wasn’t for
needing to remap the useless CoPilot key.
11 August 2025
For our local art collective, Susquehanna River Creative Collective (SRCC), I setup some Raspberry PIs connected to televisions to display our flyers advertising benefits of membership and upcoming events.
The machines are behind a firewall and running on a read-only overlay filesystem for resiliency, so I had the machines periodically pull the event images from the website, and I can change out the images on the website any time.
This was all done with desktop autostart scripts
and cron for quite some time,
but eventually, we needed more control.
We wanted to have different sets of images and to be able to choose them. For a show, we may want to only show the logo, while other times might call for all the normal advertisements.
The machines have no keyboards or mice, so they needed to be controlled by a web browser. I also don’t know if they’ll start up on the same IP addresses, so I needed a bit of Javascript in a static place to have the browser search and find running slide servers.
The service on each machine
now runs as a babashka script that starts upon automatic login.
It pulls new images from the website
and from a Google Drive,
periodically refreshes them,
and starts Eye of Mate (eom)
to run the slide show.
The babashka script
also starts a small web server
on http-kit to let us
to choose image sets
and to trigger a refresh of the images.
http-kit is provided by default in babashka.
The SRCC website is a static site built with Hugo, so I add all the events to it via an image or 2 and some YAML. It’s hard to train another normal person to do this stuff, so the responsibility fell exclusively on me. I scripted it up with some bash, but that’s still only accessible to me.
Finally, I’ve been coding all Clojure code for the past couple weeks, and I’ve started playing with Gemini CLI to see what it can do with some Clojure code.
I now have a web form available to
allow others to create events
for the website,
and it interacts with git
for publishing to the Hugo site.
The service is deployed on my normal Linux servers
as a container run by podman kube play
and systemd quadlet.
I can direct Gemini to make changes or add features, and I review the code, ask for corrections or just make updates myself. It’s kind of like pair programming with someone who’s really good at Googling answers and jumping to some (mostly) useful conclusions. Having the AI agent has helped maintain some momentum and saved me jumping down some deep rabbit holes before I needed. I’m asking it for small changes and iterating, not trying to get it to do everything in one shot.
Gemini’s CLI interface makes it easy to switch to another project directory and let it try some stuff on lots of my projects recently.
I had also played with Claude CLI for a day, but Gemini’s free tier is proving capable enough for me so far.
13 August 2024
I bought a very small laptop to use with radio work in the field, and the screen resolution is a bit small (1366x768). Pair the small display with current desktop environments' tendency toward chunky, touch-friendly interfaces, and it doesn’t allow one to cram much on the screen.
My desktop environment is Gnome, so I slimmed it down with some stylesheets:
headerbar {
margin: 0 1em 0 1em;
padding-top: 0;
padding-bottom: 0;
border-width: 0px;
font-size: 12pt;
min-height: 0px;
}
headerbar * {
margin: 0;
padding-top: 0;
padding-bottom: 0;
border-radius: 0;
border-width: 0px;
min-height: 0px;
}
headerbar box {
padding: 0.1em 0.5em 0.1em 0.5em;
}
WSJT-X is a QT app, so I scaled the fonts there to make everything fit better by setting the DPI in a launch script:
#!/bin/sh export QT_FONT_DPI=75 /usr/bin/wsjtx
12 July 2021
Upon the release of Pop OS 20.10, my System76 laptop and my Arris router started having some disagreements. The laptop would drop connection every couple hours and not reconnect itself. I’d see the little question mark in the WIFI indicator, and I needed to manually turn WIFI off and back on to restore the connection.
I found mentions of this behavior in Ubuntu and in Pop OS forums, and supposedly newer NetworkManager from Gnome would fix it, so I suffered and waited for the beta of Pop OS 21.04 to be available. That didn’t fix it, so I started digging around some more in System76’s page for Troubleshooting Wireless.
I picked my way through the tips and applied some of them. Disabling band steering in the router finally seems to have fixed the problem. I’ve kept my WIFI connection up and running for days now. I didn’t need to name the 5GHz and 2.4GHz networks differently.