AboCom Systems Inc [WN2001 Prolink Wireless-N Nano Adapter]

I needed another WiFi adapter for a computer at work. I had several old USB WiFi adapters laying around, and I thought I should try to make use of them, rather than buying something else. This lead me to try out an “AboCom Systems Inc [WN2001 Prolink Wireless-N Nano Adapter]” that I had on my desk.

When I plugged it in, the Ubuntu 18.04 computer recognized what it was and tried to load it, but gave some nasty dmesg errors in the process. It also couldn’t see any networks in the office. Here’s the output of lsusb:

alaskalinuxuser@alaskalinuxuser-OptiPlex-7010:~$ lsusb
Bus 001 Device 006: ID 07b8:8188 AboCom Systems Inc AboCom Systems Inc [WN2001 Prolink Wireless-N Nano Adapter]

And here are the dmesg errors:

[1730947.161636] rtl8192cu: Failed to polling REG_APS_FSMCO[APFM_ONMAC] done! 
[1730947.161640] rtl8192cu: Failed to init power on! [1730947.161642] rtl8192cu: init mac failed!

After digging around for a while, someone suggested this online:

alaskalinuxuser@alaskalinuxuser-OptiPlex-7010:~$ echo options rtl8xxxu ht40_2g=1 dma_aggregation=1 | sudo tee /etc/modprobe.d/rtl8xxxu.conf

However, that didn’t help either. Finally, after searching around, I ended up finding that they got this information at pvaret’s Github, which also said to do this:

Make sure to blacklist the older rtl8192cu driver, which some distros seem to load by default otherwise.

So, I edited /etc/modprobe.d/blacklist.conf with nano and added these lines:

# Bad wifi driver
blacklist rtl8192cu

All that remained was to run:

root@alaskalinuxuser-OptiPlex-7010:/home/alaskalinuxuser# update-initramfs -u

And a quick reboot gave me a working USB WiFi! It was great of folks like pvaret to share their knowledge online so I could get this thing working!

Linux – keep it simple.

Mounting a Virtual Box “vmdk” image shouldn’t be this hard….


And it wasn’t, well, once I learned how to do it properly. Unfortunately it took me an hour to get there! First I monkeyed around with vmware-tools, and vmware-mount, and then I tried kpartx, and all of it was a wash.

Then, after more searching online, I found a guy that made it plain and simple:

sudo modprobe nbd
sudo qemu-nbd -r -c /dev/nbd1 ./NewVirtualDisk1.vmdk

And that was it! Ubuntu automatically mounted it for me and it popped up on my desktop! It’s amazing when you spend hours following other tutorials, installing more and more things, only to find that there was a simple tool or way to do this that was there all along.

Hopefully it saves you the same headache!

Linux – keep it simple.

Bluetooth Breakdown: Sending gatttool commands from my Ubuntu Touch Phone!

Here I am, typing commands from my phone and controlling a Bluetooth Feather!

Of course, the moment of truth! The goal of this whole Bluetooth breakdown project was to figure out how to make my home made auto start work on my Ubuntu Touch phone. Well, here it is, working!

Although the interface could use a face lift.

Last we looked at this, we saw that we could write custom scripts to send the commands from the desktop computer to the BLE auto start, or use interactive mode of gatttool and do the work there. Now we can actually do the same from the terminal of the cell phone.

While this technically counts. We now need a snazzy program that just works with clicky buttons and that sort of thing. So, I suppose that will be the next phase of this project! Stay tuned for adventure!

Linux – keep it simple.

Bluetooth Breakdown: Sending my own commands with gatttool

Yes, there is purposely one too many t’s in GattTool.


Last time we looked at the Bluetooth Low Energy (BLE) packets being sent from my Android app to my home made auto start. Here’s what we saw:

214231313a – Button 1 pressed
214231303b – Button 1 released
2142323139 – Button 2 pressed
214232303a – Button 2 released

With a little more digging, I also found that the “handle” is important, and per the Bluetooth packet breakdown in WireShark, that handle is 0x001a. Further, my particular Bluetooth feather’s MAC address is F4:64:8E:90:D8:C3.

With all of this in mind, I entered gatttool in the interactive mode, but I kept having trouble connecting to my device. With further research, I found an article on WordPress by a guy named Jack. He got me pointed in the right direction!

What I needed to do before connecting was this:

# btmgmt le on
# btmgmt bredr off

To set the computer’s Bluetooth manager to the proper Low Energy reading/writing state. Then I entered interactive mode while monitoring my auto start with a USB serial monitor. Here’s what I typed:

root@alaskalinuxuser-OptiPlex-7010:/home/alaskalinuxuser# gatttool -t random -b F4:64:8E:90:D8:C3 -I
[F4:64:8E:90:D8:C3][LE]> connect
Attempting to connect to F4:64:8E:90:D8:C3
Connection successful
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 214231313a
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 214231303b
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 2142323139
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 214232303a
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 214232303a
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 214231303b
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 2142323139
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 214232303a
[F4:64:8E:90:D8:C3][LE]> char-write-cmd 0x001a 2142323139
[F4:64:8E:90:D8:C3][LE]> disconnect

(gatttool:22352): GLib-WARNING **: Invalid file descriptor.

[F4:64:8E:90:D8:C3][LE]> disconnect
[F4:64:8E:90:D8:C3][LE]> exit

And here is what I saw on the monitor:

Less than 13v, Pin A3: 0.00
Less than 13v, Pin A3: 0.00
Less than 13v, Pin A3: 0.00
Less than 13v, Pin A3: 0.00
Button 1 released
Less than 13v, Pin A3: 0.00
startTimer 4
Less than 13v, Pin A3: 0.00
startTimer 3
Less than 13v, Pin A3: 0.00
startTimer 2
Less than 13v, Pin A3: 0.00

Success! Great! I was able to enter interactive mode, connect, and send the right commands! This is great!

Then I switched to non-interactive mode, by writing a custom script or two. This is the first one, to start the auto start:


btmgmt le on
btmgmt bredr off
gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 214231313a
gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 214231303b
#gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 2142323139
#gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 214232303a
exit 0

And one to stop the auto start:


btmgmt le on
btmgmt bredr off
#gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 214231313a
#gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 214231303b
gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 2142323139
gatttool -t random -b F4:64:8E:90:D8:C3 –char-write-req -a 0x001a -n 214232303a
exit 0

And a quick test was successful! Now I can send my commands to start or stop the auto start from the command line with my computer. Now it’s just time to set it up on my Ubuntu Touch phone!

Linux – keep it simple.

Update to Rom/Kernel/TWRP building guide!

Hey everyone!

Just wanted to let you know that I was able to finish and upload another hour worth of videos! That’s right, currently there is more than 9 hours of video tutorial available. As promised, this was added to the series:

* Installing/using VirtualBox
* Fixing a VB Ubuntu problem with screen resolution
* Syncing minimal LineageOS or Omni for building TWRP
* Converting an Omni TWRP device to LineageOS/CM and building it.
* Custom TWRP mods with fonts/icons/splash screens/etc….


Hope that you are enjoying the series, but mostly, I hope that it is informative and gets you building!
I did try to up the video quality, but I had to tone it back down a bit, as the files became a bit large for uploading and handling. The quality is a little better than the first videos, but not exactly 1080p! 

Thanks again for all of the thanks button slaps and YouTube subscriptions. That lets me know that you guys really appreciate the videos. Be sure to check out my Video Tutorial section in the menu for links to the videos!

Linux – keep it simple.

Using A NetGear AC600 (A6100) With Linux Successfully!

Due to a few changes at work, I was in need of an USB WiFi adapter for my desktop computer. Of course, I’m running Linux, and while that shouldn’t make things complicated, when it comes to hardware, sometimes it does.

There are tons of great WiFi adapters that work great out of the box with Linux. There are even numerous Open Source, and some Open Hardware versions too. However, in Alaska, you typically have to order out for something like that. Instead, I needed a WiFi adapter today, not in the mail.

A quick run to a local “buy your groceries and everything else” (Jack of all trades, master of none) store provided me with few options. However, a quick web search proved that the AC600 (model A6100) USB adapter was working for others on Linux, so I picked that up.


Unfortunately, my first web search led me to source code which I downloaded and compiled, but it did not work. Apparently there are more than one generation with the same model number, and those drivers didn’t help me. However, further search lead me here: https://wikidevi.com/wiki/Netgear_A6100, which lead me here: https://github.com/abperiasamy/rtl8812AU_8821AU_linux .

I don’t want to rehash the already great instructions provided, so you can read that page for the full details, but here is my history from my terminal:

2015 git clone https://github.com/abperiasamy/rtl8812AU_8821AU_linux
2016 cd rtl8812AU_8821AU_linux/
2017 make
2018 sudo make install
2019 sudo modprobe -r 8812au
2020 sudo modprobe -a rtl8812au
2021 sudo iwconfig
2022 history
2023 sudo nano /etc/modules
2024 sudo apt-get update
2025 sudo apt-get install dkms
2026 sudo cp -R . /usr/src/rtl8812AU_8821AU_linux-1.0
2027 sudo dkms add -m rtl8812AU_8821AU_linux -v 1.0
2028 sudo dkms build -m rtl8812AU_8821AU_linux -v 1.0
2029 sudo dkms install -m rtl8812AU_8821AU_linux -v 1.0

Long story short: If you follow the instructions, you will have this installed in under 15 minutes, and it does work! So, if you happen to have one of these, or need to use one on Linux, it is fairly simple and does function great!

Linux – keep it simple.

Video to Gif Command Line Conversion

This is really just a side note for myself. I tend to do something only once in a blue moon, and then consequently forget how to do that again later. So, I’m writing this one down for my own future reference. Hopefully you will find it useful too.

Of course, I am using WordPress for this technical blog. And, because I am “resourceful” (a fancy term for frugal or cheap) I can’t upload videos to my free blog. Maybe someone else has this problem also, and has wondered how to get around it.

Most often, I don’t need a video for the things I post, but occasionally, I can’t show something with just a picture. Thus, I’ve found a good “cheat” is to convert the video into an animated gif file instead.

Previously, I was using online tools, such as ezgif.com, or others. But that takes up an excessive amount of internet, as you upload a video, burning my limited internet allotment (yes, there are still places on the planet where internet is not unlimited). Then you have to download the gif, only to find an issue with the settings, or a tweak you want to do, which starts the process over again.

So, I decided to do some research, and while this is nothing new, here is how I’ve found is a good way to make the conversion on your Linux computer:

~/Downloads$ ffmpeg -i autostart.mp4 -vf scale=320:-1 -r 10 -f image2pipe -vcodec ppm – | convert -delay 8 -loop 0 – output.gif


  • ffmpeg is the program
  • -i autostart.mp4 is the input file video name
  • -vf scale=320:-1 scales the video to a 320 by whatever video to preserve aspect ratio. Note that you can use 640, or whatever scaled size you desire.
  • -r 10 is the frame rate. Most cell phone video is recorded at 30 fps, so choosing 15 would be every other frame, or in this case 10, every third frame.
  • -f format and pipes, redirecting to the convert tool.
  • -delay 8 is the number of milliseconds between frames. This sets the flow and speed of the gif.
  • -loop 0 is the setting for continuous loop, however, most modern browsers use a continuous loop anyways, unless you specify something else.
  • – output.gif is the name of the output file.

The output at the console will look something like this:

~/Downloads$ ffmpeg -i autostart.mp4 -vf scale=320:-1 -r 10 -f image2pipe -vcodec ppm – | convert -delay 8 -loop 0 – output.gif
ffmpeg version 2.8.14-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
configuration: –prefix=/usr –extra-version=0ubuntu0.16.04.1 –build-suffix=-ffmpeg –toolchain=hardened –libdir=/usr/lib/x86_64-linux-gnu –incdir=/usr/include/x86_64-linux-gnu –cc=cc –cxx=g++ –enable-gpl –enable-shared –disable-stripping –disable-decoder=libopenjpeg –disable-decoder=libschroedinger –enable-avresample –enable-avisynth –enable-gnutls –enable-ladspa –enable-libass –enable-libbluray –enable-libbs2b –enable-libcaca –enable-libcdio –enable-libflite –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libgme –enable-libgsm –enable-libmodplug –enable-libmp3lame –enable-libopenjpeg –enable-libopus –enable-libpulse –enable-librtmp –enable-libschroedinger –enable-libshine –enable-libsnappy –enable-libsoxr –enable-libspeex –enable-libssh –enable-libtheora –enable-libtwolame –enable-libvorbis –enable-libvpx –enable-libwavpack –enable-libwebp –enable-libx265 –enable-libxvid –enable-libzvbi –enable-openal –enable-opengl –enable-x11grab –enable-libdc1394 –enable-libiec61883 –enable-libzmq –enable-frei0r –enable-libx264 –enable-libopencv
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘autostart.mp4’:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2018-04-20 14:05:43
Duration: 00:00:25.96, start: 0.000000, bitrate: 6103 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1280×720, 6448 kb/s, SAR 1:1 DAR 16:9, 29.88 fps, 30 tbr, 90k tbn, 180k tbc (default)
rotate : 90
creation_time : 2018-04-20 14:05:43
handler_name : VideoHandle
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 48 kb/s (default)
creation_time : 2018-04-20 14:05:43
handler_name : SoundHandle
Output #0, image2pipe, to ‘pipe:’:

major_brand : mp42
minor_version : 0
compatible_brands: isommp42
encoder : Lavf56.40.101
Stream #0:0(eng): Video: ppm, rgb24, 320×569 [SAR 5121:5120 DAR 9:16], q=2-31, 200 kb/s, 10 fps, 10 tbn, 10 tbc (default)
handler_name : VideoHandle
creation_time : 2018-04-20 14:05:43
encoder : Lavc56.60.100 ppm
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> ppm (native))
Press [q] to stop, [?] for help
frame= 39 fps=0.0 q=-0.0 size= 20805kB time=00:00:03.90 bitrate=43700.4kbitsframe= 80 fps= 80 q=-0.0 size= 42676kB time=00:00:08.00 bitrate=43700.4kbitsframe= 121 fps= 80 q=-0.0 size= 64548kB time=00:00:12.10 bitrate=43700.4kbitsframe= 159 fps= 79 q=-0.0 size= 84819kB time=00:00:15.90 bitrate=43700.4kbitsframe= 200 fps= 80 q=-0.0 size= 106690kB time=00:00:20.00 bitrate=43700.4kbitsframe= 241 fps= 80 q=-0.0 size= 128562kB time=00:00:24.10 bitrate=43700.4kbitsframe= 245 fps= 80 q=-0.0 Lsize= 130696kB time=00:00:24.50 bitrate=43700.4kbits/s dup=0 drop=483
video:130696kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

Hopefully that is a tidy explanation. Keep in mind, the higher the -vf, the bigger the gif appears, but also the larger the file. The -r value will make the gif smoother as it goes up, but will also increase the gif size in MB!

Linux – keep it simple.

Chromium: ERROR:browser_gpu_channel_host_factory.cc(121)

Today I had a strange occurrence. I couldn’t launch Chromium-browser on my Ubuntu desktop machine. The error I got was this:


And something about the profile was already open, so it wouldn’t launch again, to avoid corrupting my session or profile. Odd, I thought.

So, I did a quick history |grep chromium and got nothing in return. It believed that Chromium was open, but it wasn’t. Really odd.

Then, while typing in the terminal, I hit tab to autocomplete the program, and it said that bin/bash didn’t have enough space to complete this action, something like this:

bash: cannot create temp file for here-document: No space left on device”

Ah. How foolish of me. I then ran df -h, and sure enough, my root partition was full. All of my web page experiments were taking a toll on the /var directory, where I did not separate it from root.

So, if you see something like that. Be sure to check if your drive is full. After clearing some space, Chromium fired right up!

Linux – keep it simple.

Ubuntu Touch: Making the plunge.

I recently took the plunge, and jumped in on a used Oneplus One phone, converting it to UBPorts community maintained Ubuntu Touch distro. Yes, I now have a true Linux phone. Arguably, Android is Linux, since Linux is really just a kernel, but in most people’s minds, when they say Linux, they mean GNU Linux. Feel free to debate it in the comments. Either way, my phone is now Linux and a flavor of GNU/Linux.

With the plunge came many advancements, and several drawbacks. I’d like to take a few minutes to discuss what those are for potential end users and enthusiasts. I gave it a pretty intensive test by switching to UT cold turkey, and using that as my daily driver for over a week, part of which was while at work. It’s still on my phone, and I think it will be for quite some time.

First and foremost, it did everything a cellular phone should do. I made and received phone calls, I sent text messages, I sent MMS messages, I received the same in return. For a cellular phone, it quite literally was perfect. It took a while to get used to the interface, as it is different from Android or iOS. Once used to it, though, the interface itself was fairly pleasant. To be honest, I now am struggling when trying to use an Android interface on one of my other old phones!

There really were only two major problems with using it. Apps and programs. Due to these issues, I actually was going to give up on it, but decided to stick with it, and now I’m glad I did.

Don’t get me wrong, there are some really great apps on this thing, but there are many apps missing for my daily routine. I use my phone to Jabber (XMPP), but there wasn’t an app for that. I often grab a quick game of Chess on FICS, but there wasn’t a chess app that allowed me to do that. My email from some contacts is sometimes encrypted, but there wasn’t an app that could handle that. So, while it works great as a cellular phone, it didn’t meet my day to day app needs. I was fortunate enough to find several work-arounds for these issues, the details of which I’ll plan on sharing in another article.

Just to give you an idea though, I got really creative. I added onto my ejabber2 server with nginx, and hosted my own webmail client, although I’m still ironing out all the pgp encryption details, it is getting the job done for now. I also hosted a page with convers.js built in, it is a web based xmpp client. Eventually I converted it to it’s own HTML app for the phone as well. As for FICS and online chess, well, there is already an UT app for Chess.com, so I went that route. Don’t worry, if you are looking for details, I’ll be sure to dive into those in future posts.

The only other issue was the desktop app function. Since it is Ubuntu, you can run desktop apps inside a scope’s compatibility function. This is a great idea, and I made numerous apps work, and work fairly well. However, I had some great difficulty with several of the “regular” desktop apps.

For instance, I tried to load three different desktop email clients to work around the email encryption issue (I really was trying to make this my daily driver). However, on all three email programs, I would get to a point where I needed to enter a password, and for some reason, when I clicked in the password fields, the automatic hiding keyboard would not show up so I could type. If you are trying this out yourself, Claws-mail was working for me.

In several programs the keyboard would refuse to auto hide, making half of the screen the keyboard. However, it was only my inexperience that led to this, as I found I could “swipe” down to hide the keyboard. It’s a little clunky, but then again, using a desktop application on your phone, regardless of the OS, is a bit clunky in and of itself.

In an attempt to work around the missing jabber (XMPP) client, I loaded Gajim, an excellent desktop program for this purpose, and it did work! Unfortunately, one of my main contacts required me to install a pidgin plug-in, which, after loading, caused Gajim to crash the phone every time I opened it.

Gimp, however, worked flawlessly, and I was able to utilize it very well. One of the shortcomings I found though, was that the desktop apps and the phone apps are separate, and so are the file systems. So, if you download a picture in an email on the phone side, you can’t see it in the gimp desktop app, since the files are in different containers.

But overall it works really great as a modern day smart phone. The testament to this fact is that I’m still using it. They also have a really great OpenStore with the typical app updating features, manual or automatic, which is really nice, as well as the usual fare of apps, Telegram, Instagram, etc.

The UT team also did a great job with Google integration, if you are into that. If you wanted to sync your calendar and contacts from Google, which can make the switch from Android to UT very easy. The Web Browser app was really intuitive and functioned well. I never once had an issue with it playing or functioning. The camera app was really straight-forward and was flawless in function, which was great!

Later I’ll be talking specifically about the Oneplus One’s function, which I feel is separate from the Ubuntu Touch interface.

Linux – keep it simple.

Fool’s Mate Friday: Ubports (Ubuntu Touch) Chess, with a hint of Cinnamon.

As I dive into the realm of making my Just Chess Engine playable, I was taking a look at some of the other chess interfaces out there, to see what kind of features I should implement.

Recently, I decided to test drive Ubuntu Touch on my Oneplus One, and it was during that trial run that I tried out the chess program that they have in their OpenStore.  The app was called Chess, written by Andima Landaluze. You can check out the source code here: https://github.com/Hankamotz/xake-chess.git

Sometimes, when you open a chess app, you are overwhelmed with 3000+ options. You end up scrolling through dozens of menus, and in the end, you just wanted to play a quick game of chess. Don’t get me wrong, sometimes you need those extra options for critical thinking and deep play, but if you are playing on your cell phone, you probably just sat down on the bus for 15 minutes and decided to play a short match.

That is one of the things I like about this app. The simplicity of it. While I don’t think my app will look overall like this one, I feel I can draw from this app a little note from the simplicity. The app features the Cinnamon chess engine.

I also took a moment to look at the Chess Clock program by Michele Castellazzi. It has all the standard features of a chess clock, and worked flawlessly when I tested it out. Again, the interface was focused on simplicity, which made for a very appealing and smooth interface.

If there was anything to take specifically from the clock application, it would have to be the pause feature. Setting up my own interface for play, it might be nice to be able to pause the game, but further thought brought me to the idea of pausing the game if you press the home button as well. Perhaps that might be a handy feature, as well.

Linux – keep it simple.