All posts by S. Fisher

Logitech G900/G903 Double-Click Fix – Replace the Switches

If you are still using a Logitech G900 or G903 mouse, I highly recommend replacing the switches with either the Omron D2F-01 or D2F-01-F. The D2F-01 has a higher actuation force which provides a more tactile and satisfying click than the original switch; personally this is what I’m using. The D2F-01-F has the same actuation force as the original if that’s what you prefer. The reason you’d want either of these switches is because both are Japanese Omron switches which are considered higher quality and more reliable than the original Chinese Omron switch (D2FC-F-7N). It seems the Logitech G903 and their newer mice are notorious for double-click issues; just Google it or take a look at the /r/LogitechG and /r/MouseReview subreddits. These YouTube videos go into great detail to explain why newer mice fail so often and cover different switch types: https://www.youtube.com/watch?v=v5BhECVlKJA and https://www.youtube.com/watch?v=NhhRTUrz0R8.

The Logitech G900/G903 isn’t too difficult to take apart but there are quite a few screws to keep track of and they are not all the same length. Be sure to have a spare set of replacement mouse feet since they must be removed in order to open the mouse. Here’s a list of YouTube videos that detail tearing down the Logitech G900/G903:

I also took some photos while taking apart my G900; hopefully all of this info will help you upgrade your mouse with new and better switches.

DNS-Over-HTTPS on Pi-hole (cloudflared setup on Ubuntu)

I’ve been running Pi-hole with DNS-Over-HTTPS using Cloudflare’s DoH client (cloudflared) for some time now; I followed the guide posted here on the official Pi-hole documentation site. When updating the cloudflared recently, I noticed it displayed some errors when the service tried to start up. After digging around, I found that cloudflared now has an option to install itself as a service whereas the guide I used includes steps for creating the service manually. Thus, I believe this is a simpler way to setup cloudflared as your DNS-Over-HTTPS client for Pi-hole.

Download the cloudflared daemon and install it:

Create a folder and config file for the cloudflared daemon:

Use the following command to instruct cloudflared to install itself as service:

Start the new cloudflared service and check the status:

You should get output similar to the following if successful:

Now just configure Pi-hole to use cloudflared as the DNS resolver:

ASUS Strix 2080 in a Node 202

TLDR: Yes, you can put an ASUS Strix 2080 (and likely any other ASUS Strix card) in the Fractal Design Node 202. Check out the gallery below.

I had to RMA my ASUS Strix 1080 Ti last month; when packing it for shipment I realized it would probably fit inside my Node 202 if I removed the fans and shroud. Thus I decided to upgrade my main PC to an ASUS Strix 2080 Ti and use the replacement card in the Node 202, which ended up being an ASUS Strix 2080. This card is 2.7 slots and larger than the Strix 1080 Ti but I was still able to make it fit inside the Node 202 after removing the fan and shroud. However, there are a few things you should know if you want to try this:

  • The bracket and tabs on the heatsink for the fans and shroud protrude far enough to prevent fans from spinning if you set them up to exhaust from the 202. So you have to set the fans as intakes unless you want to rip off the tabs/bracket and void your warranty.
  • One of the 120mm fans must be offset from the other because of the tabs on the heatsink. See Pic #3 below.
  • One of the screws that secures the GPU bracket to the Node 202 must be removed because it will hit the corner of the Strix PCB. See Pic #4 below.
  • You’ll want the Node 202 in vertical position and use pressure optimized fans to get as much air in as possible.
  • By relying on 2x120mm fans to cool the Strix 2080, you need a way to control them. The Strix 2080 has external fan headers but the software to control them is buggy and requires a workaround.

I am using ASUS GPU TWEAK II to set a custom fan curve on the external fan headers; the very first time the program runs, an executable named ASUSGPUFanServiceEX.exe launches and then closes immediately. This exe is responsible for applying custom fan curves so without it your custom fan curve is not applied. Launching this exe again fixes that problem but also leaves you with a blank command prompt window. To fix this I use Windows Task Scheduler to launch a Visual Basic script at every startup that will run and hide the program:

I haven’t done any rigorous testing but GPU temperatures seem to be decent. I’ve been playing Witcher 3 again at 1800p (custom resolution 3200×1800 with GPU scaling to 4K) on the Ultra Graphics and High Post Processing presets; temperatures generally range from 60C to 70C. My fan curve is set to run at 100% at 70C.

While it can be done, I would not recommend buying an ASUS Strix card if you already have a Node 202. It’s much easier and simpler to just use a 2 slot card. If you want to use the ASUS Strix for a new ITX build, buy a case that can actually hold it like the Cerberus or a Define Nano S with an SFX power supply.

Asus RMA Support in 2019

I recently sent my ASUS ROG STRIX GeForce® GTX 1080 TI 11GB OC in for an RMA after my games started crashing within a few minutes; looking at the Event Viewer I found error messages indicating the Nvidia drivers were resetting (Display driver nvlddmkm stopped responding and has successfully recovered). To date I have only had one previous experience with ASUS RMA support; back in 2011 a friend of mine overseas gave me his RAMPAGE GENE III that was dead. I was able to RMA it with no issues and used it for an i7-950 build.

Here is the timeline of events:

  • Monday July 22 – I contact ASUS Support through the website and state I have tried troubleshooting by reinstalling drivers, reinstalling Windows 10, trying different PCIE slots and a different system.
  • Tuesday July 23 – I receive a reply from an ASUS Support Agent. Based on my initial message, they direct me to create an Online RMA by visiting https://www.asus.com/us/support/Article/818 (looks like I could have saved a step by going directly to this page). I fill out the Online RMA request that morning and let the Agent know I have done so. They reply back in the afternoon stating the Online RMA was not successfully pushed through and offer to process it manually.
  • Wednesday July 24 – The Agent confirms my RMA has been processed; I receive an RMA Number and instructions on how to ship my 1080 Ti. I package the 1080 Ti and drop it off at USPS in the afternoon (I did not purchase the label from ASUS). It is expected to arrive at the RMA facility by Friday July 26.
  • Friday July 26 – The USPS tracking number reports there is a delay.
  • Monday July 29 – I check the tracking number again and the 1080 Ti has been delivered successfully.
  • Tuesday July 30 – I visit the ASUS Check Repair Status page and it shows ASUS has received my 1080 Ti.
  • Wednesday July 31 – I visit the Status page again and it is in the testing phase.
  • Thursday August 1 – I receive a notification from the Fedex Delivery Manager that I have a package coming from ASUSTEK. I look at the Status page and it confirms my repair has been completed. There is no mention of what the replacement card is so I assume it is another 1080 Ti.
  • Wednesday August 7 – I receive the package from ASUS. I open it to find a ROG Strix GeForce RTX™ 2080 OC.

It took 16 days from first contact to when I received my replacement graphics card. Potentially this could have been faster if USPS delivered my 1080 Ti on Friday instead of Monday and if I had created the Online RMA directly rather than contacting support first. The replacement took just under a week to be delivered; it was ground shipped from Jeffersonville, Indiana and I live on the opposite side of the US (West Coast).

Overall I would consider this experience a positive one; much better than the time I had to RMA Sapphire 290s repeatedly. The 2080 is a minor upgrade over the 1080 Ti according to TechPowerUp’s review. I have been using ASUS graphic cards since purchasing the ASUS STRIX GEFORCE® GTX 980 Ti back in 2016. After that came the 1080 Ti and now the 2080 replacement. I also have the ROG Strix GeForce RTX™ 2080 Ti OC which I bought after sending in my 1080 Ti (I used this whole ordeal as an excuse to upgrade). If you are having trouble deciding which brand of graphics card to buy, consider differentiating them by their customer support and where their RMA center is. For example, Gigabyte’s RMA facility is located in City of Industry, CA which is a lot closer to me than Indiana.

Flood-UI and Rtorrent on Ubuntu 18.04/16.04

I was bored yesterday and googled “best bittorrent web client” and eventually stumbled onto Flood-UI – it’s a nice modern webui for rtorrent. You can find multiple screenshots of it here. I followed this guide but I had to make some changes for it work on my seedbox; most of the instructions below are taken from the guide I used.

Install rtorrent, setup a user to run rtorrent and make an rtorrent config file:

Paste the following into .rtorrent.rc; you can customize the ports you want to use for rtorrent here:

Create the directories as specified in the above config file for rtorrent; I couldn’t think of a better place to put everything so I just used the paths in the guide.

Create a systemd script for rtorrent:

Give it the following contents:

Enable and start the rtorrent service:

This is where I had to deviate from the guide I was using and install Node.JS/Flood differently; when I followed the guide as is I couldn’t get Flood to build/install correctly. After fixing that issue, I noticed files wouldn’t get deleted when removing torrents (even with the option checked to delete files); the solution to this was to just run both rtorrent and Flood as the same user.

My seedbox didn’t have git or curl installed so I installed those first:

Next I installed the latest version of Node.JS following this guide:

I also needed to install gcc g++ and make:

Next clone the repo from Git and make a config file for Flood. Per the official documentation you should edit config.js and change the secret value to something long and unique (the default value is flood). If you run into permission errors while running git or npm, try changing ownership of /srv/torrent to your user before you run those commands. I had to do this when I tried to repeat this guide on a new box where I wasn’t logged in as root; just remember to give ownership back to rtorrent when finished.

Next install Flood:

Give our previously created user permissions to run flood:

Create a systemd script for Flood:

Give it the following contents:

Enable and start the Flood service:

Flood and rtorrent should be running at this point; the default port for Flood is 3000. Since I already had nginx configured as a reverse proxy for the Deluge WebUI, I just edited my nginx config to point to Flood instead. The official documentation has additional details on using Flood behind a reverse proxy here. If you are going to access Flood directly by IP, you may need to edit config.js and update the floodServerHost and floodServerProxy to the IP address of your server.

When logging into Flood for the first time, you will need to register; pick your username/password and provide the IP and Port for rtorrent:

Vlmcsd on Ubuntu 18.04

vlmcsd is an open source KMS emulator that can run on a variety of CPU architectures and operating systems.  You can find it officially on the My Digital Life forum (registration required) although at least one other person has mirrored it on GitHub. I’ve been running it for the past few months on my Skull Canyon NUC running Ubuntu 18.04; below are instructions to get it running as a service.

The easiest way to download is through Github. I also renamed the binary to just vlmcsd to make it simpler and copied it to /usr/local/bin:

Make a user to run vlmcsd as a service and give the user permissions on the binary:

Create a systemd script:

Give it the following contents:

Make a folder under /var/log for logging and give the vlmcsd user permissions:

Now you just need to enable and start the service:

Check the status of the service:

If all goes well, you should see output similar to below:

To activate a product like Office 2016 against this KMS emulator, you can use the ospp.vbs script located in your Office installation folder:

Sega Dreamcast – picoPSU, Battery Holder and Controller Fuse Mods

Last summer I modded my Dreamcast with a GDEMU and Noctua fan; I decided it was a good time to throw in a few more mods: a new power supply, battery holder, controller fuse and a 3D printed insert for the GDEMU.

Replacing the original power supply is generally recommended when you remove the optical drive to install the GDEMU or USB-GDROM; supposedly the power supply runs hotter because the 12 V rail is no longer loaded by the optical drive. There are a few ways to go about replacing the Dreamcast power supply:

I found an eBay seller offering pre-modded picoPSUs for the Dreamcast; they even include a 3D printed bracket to secure the unit in the same place as the original power supply. I went with this option since it was the most complete solution and required the least amount of work.

A 12 V DC power adapter is also needed to drive the picoPSU. Most recommendations are for one that can output 2 A to 5 A; you can find tons of generic wall warts and power bricks that meet this criteria on Amazon and eBay. I wanted the best one so it was hard deciding which of these generic power adapters to buy. Luckily I found a Seasonic power adapter that works perfectly for the Dreamcast picoPSU mod: the Seasonic SSA-0601HE-12. It’s rated for 12 V 5 A and has the correct barrel connector for the picoPSU (2.5mm, center positive). Seasonic is known as one of the best PC power supply manufacturers; based on Seasonic’s reputation alone, I’m going to say that this is the best power adapter for the Dreamcast picoPSU mod.

Installing a GDEMU leaves a lot of empty space in the drive tray and SD cards can drop out of reach during swaps. I bought a 3D printed insert that fills the void and came with an SD card extender; the insert gives the Dreamcast a nicer look and makes it easier to swap SD cards. The insert can be purchased from this eBay seller.

Years ago I modded my Dreamcast to use eneloop batteries instead of the built-in rechargeable battery. It works but doesn’t seem to last as long as you would think despite the capacity being several times greater. I removed the eneloops and installed a button cell battery holder and ML2032 battery for a cleaner look. I ordered the holder from Amazon and the battery from eBay but you can also find them bundled together on eBay like this.

The Dreamcast suffers from a common issue where controllers stop working because of a blown fuse although mine has never had this problem. I replaced it anyway with a PolySwitch 72V 400mA fuse from Amazon. This fuse can be reset by turning the Dreamcast off and on again. It’s a simple mod to perform; just swap the old fuse (labeled as F1) on the controller board with the PolySwitch. You can find a detailed guide on this mod here.

This is now the coolest Dreamcast I own; the only thing it’s missing is a DCHDMI. Fortunately I’ve already got a VGA box and OSSC.

MacOS Mojave – Reset and Lock Size of Dock

I like keeping the macOS Dock at the default size but sometimes I fat-finger with the trackpad and accidentally resize. It’s a shame there is no obvious way to change it back to the default. Fortunately someone figured out the default value of the dock size; you can restore the size with the following command:

You can also disable resizing entirely with: