Hardware Software

Ubuntu Apple Magic Mouse Woes

I’ve been running System 76’s Pop OS as my desktop OS for a few weeks now. I switched from MacOS to Linux full time this year; previously i had at least one MacOS iMac and then one or two Linux boxes. Now, since my sad mac woes where my hard disk failed (or was failing SMART checks) and I tried to fix which left the iMac running sub-par — I built a Linux box and switched full time. If felt like an awakening of sorts as I’d been praising the beauty and small form factor of the iMacs when the hardware was dreadfully underwhelming. More detail on my Linux box later, this post is about Apple HID or Human Interface Devices. I just like my Apple keyboards, trackpads and mice. I’m still using them on my Linux box happily but there is one thing that has been grating me — emulation of a 3 button mouse which by default pastes clipboard content.

So, modern Linux by default support Apple’s Magic Mouse and it provides all the touch features you’ve been used to on MacOS. Unfortunately, it also emulates a 3 button Unix mouse where the middle button pastes from the clipboard. This is so frustrating as the middle click area is awkwardly close to the left click area. I googled and “fixed” this by executing the following command line:

% sudo rmmod hid_magicmouse
% sudo modprobe hid_magicmouse emulate_3button=0

This is quick and it seems to have survived a reboot so I hope it sticks. It essentially turns off the middle button click but leaving left and right and the other various touch features.

I read this on a forum recently and I though it was very appropriate

Honestly, I won’t say the transition has been entirely painless – it does take time to adjust to a new operating system, but I have to say, my biggest regret is that I didn’t ditch Apple’s computers sooner. I love my iPhone but honestly it does feel like Apple just isn’t all that interested in their desktop / laptop computers recently.

Hardware Software

FreeNAS 11.3 + Asterisk VOIP, Cisco IP Phone 7942

Create your own PBX for VOIP and run it all from within your FreeNAS 11.3 server in a Jail — no WebGUI needed for Asterisk as long as you are comfortable with the command line. I see a lot of folks talking about using FreePBX which looks amazing but honestly I just want to run this in a FreeNAS jail and Asterisk is really all you need. I purchased 11 Cisco 7942 IP Phones for $40 (including FedEXshipping) from Goodwill which is such a deal considering these phones were on sale new until February 2016 for $455.00 USD! Now this phone is a trip to configure for SIP especially if you are going to handcraft the XML which is how we are going to do it (there is plenty of documentation on line to help you). I will draw heavily on an blog article I read from and I will add bits that worked for since I had a slightly different setup. Many thanks to Will Cooke who wrote the article, I’ve literally read it a dozen times and I get a bit more each time I read it. No joke this took me a solid 10 days during Covid-19 lockdown to figure out (obviously not 10 days straight — I set small goals and would keep at it until I got a bit farther…). OK, on to the steps…

Step 1 — Setup FreeNAS Jail

Let’s get a FreeNAS Jail setup and download Asterisk. We won’t configure Asterisk yet, just download and install. We’ll focus on the latest Asterisk version 16. Also, we will want to use SIP for VOIP, Asterisk can do much more but everything is SIP now-a-days.

Step 2 — Setup your Wifi Router for TFTP and NTP

I don’t want to install any specialty software (like a TFTP server or Cisco Call Manager). I have a very capable ASUS router that is flashed with the ever popular Merlin firmware, so I figured I’d enable NTP and TFTP on it. Why does this matter? Well, you see, when a Cisco IP Phone boots it first tries to get an IP4 address via DHCP and next it looks for a local TFTP server to load it’s config. You can specify in the phone the IP address of the TFTP server but by default it’ll look at the same gateway server that it got it’s DHCP address from. ASUS Merlin uses DNSMasq binary for various DNS services and you can enable TFTP within DNSMasq with a few quick steps.

  • Flash your router with the latest supported Merlin firmware.
  • Login to your routers web GUI, mine is at, default login is admin
  • In Administration >> System >> Change router password, set the new login name and password. Make sure it’s a strong password.
  • In Administration >> System >> Persistent JFFS2 Partition, click Yes on BOTH Format and Enable persistent JFFS
  • Before we leave this page, On Basic Config, select Yes to Enable Local NTP Server and Intercept NTP queries. You must then set you Timezone and Daylight Savings parameters.
  • Continuing on this page, Find Service and set Enable SSH to “LAN Only”
  • Click Apply
  • Next, install a FAT32 formatted USB thumb-drive in one of the routers USB slots.
  • REBOOT your router. When it comes back up ensure that all the setting you set were applied. NOTE, in Administration >> System >> Persistent JFFS2 Partition >> Format will now be set to “No” and that is correct.
  • In an SSH Terminal on your Mac, Windoze or Linux box, connect to your router with ssh <login>@ use the login and password from the earlier step. You will be prompted to save the server key for your first login, type y or yes.
  • In your SSH session, do the following:
cd /jffs/configs
vi dnsmasq.conf.add
<hit the i key to insert and type>
tftp-root=/tmp/mnt/<some directory on that USB thumbdrive>/tftproot
<hit esc key to break out of insert mode>
<hit SHIFT and ZZ to save>
  • While you are still in your SSH session cd to /tmp/mnt and find your USB drive. I set mine to mount as data so I cd’ed to /tmp/mnt/data
  • Create the tftproot directory by typing mkdir tftproot
  • Set the permissions on that directory to 777 and set the owner to nobody via the chmod and chown commands
  • Restart your router again via the web GUI which will end your SSH session.
  • When your router is back up check that TFTP service is listening (it’s running on port 69 😉 ) You should see something like this
<user>@<router>:/jffs/configs# netstat -an | grep 69
udp        0      0  *                           
udp        0      0* 

Remember this tftproot directory on the USB thumbdrive because you are going to be referencing it a lot. I basically have a terminal window opened and ssh’ed to that directory which I used to create all the XML files to configure the Cisco IP Phones. Remember that every file and subdirectory needs to be chmod’d to 777 and chown’d to nobody so the Cisco phone can read them.

Step 3 — Download the SIP Firmware from Cisco

Remember that I said everything is SIP now-a-days? Well, Cisco used another protocol called Cisco Skinny and I bet 9 times out of 10 any Cisco IP phone that you find used will have the Skinny protocol on it rather than SIP. It’s fairly easy to update the phones. Let’s get the latest software. You do will need to register an account to download the files, it’s free.  At the time of writing the latest version is of SIP firmware for the Cisco IP Phone model 7942 is 9.4.2 SR 3 dated 15th February 2017, even though these phones are end-of-life.  Bizarre, but good for us.  Thanks Cisco! <<< this last comment is from Will Cooke which I thought was funny so I copied it here. You should get the software package labeled “7942 and 7962 SIP IP Phone Firmware Files Only” which is about a 6 Meg zip file. Download it and copy the zip to the tftproot folder and uncompress it. Please remember to set permission on all extracted files to 777 and owner to nobody. BTW, the 7942 and the 7962 are the same phones but the 42 has 2 “lines” and the 62 has 6 “lines”.

Step 4 — Flash the phone with SIP Firmware via the TFTP server

Take your Cisco phone and turn it over. On the back side there is a port labeled 10/100 SW which stands for Switch or the connection to the network switch to be more exact. If you network switch supports PoE (Power over Ethernet) than all you need to do is plug a CAT5 or CAT6 patch cable from the switch to the 10/100 SW labeled port. I have a Cisco Meraki Gb PoE Ethernet switch so I’m all set! If you don’t have a PoE capable switch then you need a power adapter which you can get on Amazon. When you plug in the phone it will attempt to boot and connect to whichever service it was configured for — this won’t work and the phone will spin on registering or it’ll say “Unprovisioned”. What you want to do is flash the firmware that you just downloaded.

  • Unplug and then plug the network or power back in and hold down the # key (only takes a few seconds on 7942 model)
  • Eventually you will see the “line” lights start to flash orange.  When the line lights are flashing type 123456789*0#  This will start firmware download mode.
  • The screen will go black for a moment and then go through the process of getting an IP address and connecting to the TFTP server Once connected to the TFTP server the software download will start. You can check the server logs on your router to see the connection, the DHCP and finally the TFTP file requests. Note: that it’ll ask for some files that you won’t have and that’s ok for now since we’re focusing on the firmware.
  • The upgrade takes 5-10 min normally. The phone will reboot once download is complete and present you with an “Unprovisioned” message on the screen.  This is good news!  The phone firmware has now been updated — go to the next step, else continue to the next bullet item here.
  • If the phone sticks at the “Upgrading screen with the Cisco logo” for more than 10 min with no visible activity then you are in whats called the “Boot Loop”. I had this on about 5 of my phones; I don’t know what causes it but I’ll tell you how to fix it.
  • Unplug the phone and replug it again and hold # as it boots (like before) and instead of 1234567890*# do 3491672850*# (notice the pattern of your fingers with each sequence so you can repeat it without even thinking in the future). The “lines” will flash RED this time.
  • Do not do anything to the phone until it completely resets and comes back up functional. This essentially formats the flash and only keeps the Cisco Native Unix (CNU). It takes 10+ minutes and for a while it looks like the phone isn’t doing anything (but it is). Be Patient. Your phone will automatically reboot and hopefully this time it’ll connect to the TFTP server and begine the Firmware install.
  • You can repeat this process if you ever need to, I did it on my first phone a dozen or more times without any apparent impact to the phone.

Step 5 — Configure the SIP extension in Asterisk

Will Cooke mentioned an important piece of information in mind: The Cisco 7941 can only deal with 8 character passwords, so keep your SIP authentication secret to 8 characters. I haven’t checked if 7942 improves this, YMMV. Ssh to your FreeNAS server and use jexec to ssh into the Asterisk jail. When you are at the command line, do the following:

cd /usr/local/etc/asterisk
vi sip.conf

<add these lines at the bottom>


<hit shift ZZ to save it>
<then run this command>

asterisk -r

<at the Asterisk CLI Command Line Interface, type>


Step 6 — Create Phone XML Config and Upload to the TFTP Server

As Will Cooke states: Please take the time to read this section fully, this is the part that is most troublesome. The Cisco 7942 is very picky about it’s config file and even a small mistake will stop the phone from working. I spent many days on this step; it will not be uncommon for you to spend many days as well on this. These settings are specific to the 79×[1,2] series of phones running v9.x.x of the SIP firmware. If you are not using this type or hardware or software then these settings are not for you.

Once the phone has loaded it’s firmware and booted, it will go looking for a file called SEP<PHONE MAC ADDRESS>.cnf.xml.  So if the MAC address of your phone is 11:22:33:44:55:66 then the config file needs to be named SEP112233445566.cnf.xml.  This file needs to be in the root of your TFTP server. The file is CASE SENSITIVE; go back and read that part again. A small typo that thinking a B is an 8 or vice versa will cause hours of “fun” so please check carefully.

Here is my file:

<?xml version="1.0" encodng="iso-8859-1"?>
      <timeZone>Central Standard/Daylight Time</timeZone>
        <member priority="0">
      <line button="1" lineIndex="1">
          <autoAnswerMode>Auto Answer with Headset</autoAnswerMode>
      <line button="2">     

Copy this XML file to the root of your TFTP server. You phone will automatically try and load the config; if you are impatient you can hit the settings button on the phone and then hit asterisk key twice then the hash key and finally asterisk key twice ( **#**). This will cause the phone to soft boot and try and load the config. It will probably load the firmware again to finish loading the SIP firmware which is completely natural. If successful after all the reboots, the phone will not show “unprovisioned” and the phone icon next to the “line” button on the right side will NOT have an x in it. Go ahead and make a call!


Need to fill this out.

Hardware Life in lockdown

Bose Wave Radio vs Amazon Alexa

I recently purchased a Bose Wave Radio from Goodwill for $76 + shipping. It had no remote so add on $10 for a new remote (no battery included grumble, grumble). I’ve always wanted a Bose Wave Radio, but the price always kept me from them ($499 USD retail). Here is a legitimate review from cnet, so many reviews seem so fake or paid for.

My review is simple — the Alexa doesn’t hold a candle to Bose in terms of sound quality. The base and drums are deep and rich on the Bose compared to my Mono Alexa. I did three experiments playing the same song Alexa and the Wave Radio. Two of the experiment use Plexamp connecting to my NAS to play an Apple Lossless (ALAC) rip of the physical CD — One via Alexa connected by Bluetooth, the Second the Wave Radio connected via AUX port and cable. The third experiment is using the physical CD as control. I wasn’t expecting Alexa to win, it’s Mono for gosh sake. I can configure an Alexa pair with both a left and right channel but it’s honestly a pain to setup and use so why bother.

Amazon Alexa Mono ALAC Rip Plexamp over Bluetooth

Conclusion is go out and buy yourself a good quality Bose Wave Radio at Goodwill and pickup some physical CD’s while you are there. Audio quality is much better than streaming IMHO but YMMV!

Life in lockdown

Are we human, or are we dancer?

Tomorrow marks the very gradual lifting of restrictions on daily life for England (Scotland and Wales having made different choices).

On reflection, so far the lockdown hasn’t been all bad. People have made sure to look at for one another and a sense of comaradrie is present.

That said, there still have been tough times. It feels very normal and yet not normal sometimes. Seeing the number of people who have died each day makes sobering reading and I find myself switching between seeing small troubles at home and work disappear into insignifance and at other times, those same annoyances loom large as they are ever present.

Anyway, for now, I hope tomorrow marks the path forward. I took a walk this evening and listened to music. The streets were deserted. I danced, let go of my self consciousness and reminded myself that life is indeed, very precious.


Game Emulators – GameCube, Wii, PlayStation

My boy.

Life in lockdown

Cast Iron Dutch Oven

I’ve wanted a cast iron Dutch oven for a long time. I saw this Kelty Ridgeway on goodwill for a good price. It was in sad shape. Rust and crud really made this one a mess. I cleaned it using a method of lye and elbow grease and a steel wool pad. That for the piece to more or less bare metal but I still had to deal with the rust. I soaked her in a vinegar and water bath for 72 hours which returned her to bare metal. I quickly rinsed and dried and seasoned to restore her. Looks good if I do say so myself.


Fixed Goodreads Plugins

The Goodreads plugins I’ve been using on my blog have been broken for the past few months. When I installed WordPress fresh in a FreeBSD jail I got everything working on WordPress except the Goodreads plugins so I left it for another day. I was seeing a series of error messages in the nginx error logs and I wasn’t sure if the issue was related HTTPS and SSL or another type of issue. Well, today I had a bit of time to dig into the issue and I found that there were in fact four (4) separate issues that needed to be solved (all very sneaky). The first issue related to the cacert.pem file in the curl configuration; I was on to this before but I hadn’t experimented enough to solve it. The second issue was a missing module php73-simplexml which I needed to install (duh!). After that I had an http dom module in a plugin that was throwing regular expression errors and I had to scan the file and escape a series of dashes in the regexp pattern. I also had to correctly define the bookshelf I used in my Goodreads configuration (it had a dash!). Everything seems to be working fine now. The site is looking more profesh now and bonus, no more daily errors in the errorlog!

Life in lockdown Science


I read an article yesterday that there was to be a meteor shower for the next two nights that would be visible without the need for a telescope. Given I’d got myself all worked up about an issue at work, I thought a nice reminder of how unimportant it all is would be just the thing I needed. I went out after 10pm to have a look as the sky was clear, I couldn’t see any meteors, or indeed the satellites which everyone else seems to be spotting recently but I did see what I think is Venus shining brightly in the sky. I tried to capture it, but it’s a bit blurry:

Anyway, today is a new day. I’ve downloaded an app to my phone which helps you identify which stars/constellations you’re looking at & I’ll try again tonight.

UPDATE: Still couldn’t see the meteor shower but the app (Star Tracker) did at least show me where the Lyrid constellation was so I could be confident of looking in the right place. Rose and I had some fun using the app to try and find the names of the stars we could see.



I had big plans for the weekend. I was going to fix both my iMacs (one had a faulty ambient temperature sensor) and the other a faulty lcd video interface. Both seem fixable and in the proper hands and with the proper supplies I’m sure they would be fixed. But, sadly, this weekend was not my weekend to be that guy to fix them. I was working on the Big Mac the 27 in one and in the final stages or reassembly. I had pulled out the ambient temp sensor and visually inspected it. So I was putting it all back and my hands were a bit sweaty and the lcd heavy. Anyways a slip and the video cable ripped out of the mother board. A simple slip has such a drastic outcome. I have to say I was crestfallen. To add insult to injury the ambient temp sensor was still faulty meaning the pins are maybe bent inside connector. I left the machine the way it was and made dinner and played a board game to occupy my mind. I must have been outwardly really sad because my daughters, my mom and Katie all mentioned I sounded sad. Not one to wallow in sadness long I laid in bed and thought. Those machines had a good lifespan. 8 and 10 years old. I also thought that building a nice new pc with modern parts would obviously be more powerful and even run cooler and less power consumption. I had run geekbench before and even my best iMac was woeful in the stats compared to cams more modern setup. So, with that I will build a new pc. Only question is hackintosh or Linux? How about both! I can salvage the two ssds from the iMacs and I have a case. I have that nvidia graphics card. Just need power supply, memory and cpu. I put the iMacs in my closet and I can revisit them again at some later point if I desire. They are not collectible now but who knows in the future.


Garden Furniture Restoration: Part 1

Started restoring the outdoor table and chairs today. OK, so strictly speaking, I started to treat the wood last weekend, but I had to admit to myself more serious prep was required.

So roll on this weekend… And armed with an electric sander, the job begins in earnest. I’ve not used an electric sander before. It made my hands feel a bit strange after using it for a while. Here’s the table so far:

I managed to do half a chair as well before needing to give my hands a break. Quite pleased with result so far. Plenty more to do as I don’t feel I can make shortcuts now. All the old stain will have to be removed. Part 2 tomorrow if the weather holds.