I everyone, I just wanted to share my experiences and thoughts about starting a company using only Linux and as much free / open source software as possible. I know that most other companies that do use Linux extensively tend to be technology centered companies, so I wanted to do a write up on my experience in creating a company that is not directly IT or development related.
First, a little background about myself. I was a software engineer for 5 years where I got most of my experience in using Linux. I then went to dental school and have been a practicing dentist ever since. This “report” will be more focusing on my dental practice and how I started it up. Yes, there is the EHR software that I am working on but that is a whole other long story and maybe I’ll make a dedicated post about that later.
Also, all the hardware and services that are listed are NOT a recommendation. I only list them to help other people out as a starting point. I am sure other people can find better alternatives to the ones I got.
With the exception of the Raspberry Pis, all the computers (including my personal one) are running the latest version of Kubuntu. There is a long story as to why I decided to use Kubuntu but the main reason is because I am using Qt and QML and that tends to work better on Kubuntu than Ubuntu. I also don’t want to use any distro that is a rolling release which is why I can’t use anything Arch based or even KDE Neon.
Sadly, here in the US, most of the paperwork is sent via fax (which I will get to a little later) and sometimes they need a real physical signature. This required me to get a real printer and scanner. I ended up getting the Brother HLL3290CDW. KDE was able to find it on the network without any issues and I was able to start printing without having to install any special packages. Skanlite was able to find it and I was able to start scanning ASAP. It works well but has two major problems. First is the fact it only connects to the network wirelessly and lacks an Ethernet port. Sometimes, Skanlite doesn’t see the scanner over the WiFi and I have to tell it to try again. The second issue is that sometimes when I scan a large area at a high resolution over WiFi, Skanlite gives back an error. I don’t know if it is really a Skanlite problem or something wrong with SANE. If I could go back, I probably would have bought the same brand (Brother) but gone with a different model. Otherwise, I am satisfied with the purchase.
After coming up with a name I made the logo using the enso from Wikipedia and got the tooth itself from OpenMoji and modified them using Inkscape. Sharing the logo with other designers wasn’t really much of a problem except for one issue with Inkscape where it uses a non-standard “flow text” for the SVG file that doesn’t always show up in Illustrator or other SVG viewers. Once I used a different type of text, it would show up properly on other peoples’ computer. Most of the designers I worked with wanted either SVG, EPS or PNG in order to make the building signs.
I had a different vision for the desktop computers every step along the way. First, I originally wanted to put a Raspberry Pi in each room as that would control the cost. However, once I decided to go with a triple monitor solution, I had to get a “real” desktop in each room. At that point, I wanted to go all out and get a full gaming PC in each room. Thanks to the pandemic, that became prohibitively expensive.
So for the front desk, I built two PCs with an AMD APU. The combination was AMD Ryzen 5 3400G + 8GB RAM @ 2666 + GIGABYTE A520I AC. For the Ops, I built one with AMD Ryzen 3 3100 + 8GB RAM @ 2666 + SAPPHIRE PULSE Radeon RX 5500 XT and two that were built with AMD Ryzen 3 3100 + 8GB RAM @ 2666 + Biostar Radeon RX 550 2GB.
The GIGABYTE A520I AC has an issue where one of the HDMI ports doesn’t work under Linux. The ones marked as green works fine, the one marked red will not work under Linux and you have to use the Windows motherboard driver in order to make it work. I wasn’t able to get it resolved. I even tried to use the AMDGPU-Pro driver and that didn’t work either. So for the desktops that were using the AMD Ryzen 5 3400G APU, I had to get a MST Displayport hub that would take in one of the Displayports and would convert that to 3 HDMI outs.
Also, you would think that by getting a dedicated GPU that has 4 ports, it should have no trouble connecting to 3 TVs via HDMI. Apparently that is not the case with the SAPPHIRE PULSE Radeon RX 5500 XT. If you use the HDMI port to connect to a TV, and then two passive Displayport to HDMI adapters, it will NOT work. I had to get another MST Hub just for my GPU. There might be a way around this but I couldn’t figure it out.
I had an electrician do most of the wiring. I told him to use Cat 6 Ethernet and have a port in just about every room. I ended up using Ubiquiti for the router and switch (yes, I know about the hack, I made this purchasing decision back in November 2020). I got a Dream Machine Pro and a Switch Pro 48 PoE because I combined it with 3 nanoHD Access Points. Complete overkill; but because I knew there was going to be more than 20 devices, I wanted to get something more future-proof. For somebody with a poor networking background, it wasn’t too hard to setup the network.
Now, you would think somebody with my kind of background would make the networking area nice and neat. I am very sorry to disappoint.
So I wanted to show relaxing videos in the reception area. I hooked up a Raspberry Pi to the TV, then I had it autostart VLC and then I can control it via the web interface. You can apparently add arguments to VLC to make it show a logo along with the current date and time. You can see it in action here. I also wanted to have music in the restrooms. So I also added a Raspberry Pi in the corner and had it autostart mplayer to play music. There is actually an argument to have to add in to the boot for Raspberry Pi OS to make it fully boot without a monitor (I can’t find it right now) but if you are having trouble with a headless Raspberry Pi, that is the reason why.
So I wanted to use as much of an open source solution to VOIP as possible. I ended up using both voip.ms and Linphone. The main reason why I chose voip.ms was because it supported phone, fax, text messages, has a voicemail system, and an API for 3rd party apps. Linphone works fine with voip.ms, except for receiving text message. I can send them via Linphone fine but there appears to be a bug in Linphone for getting a text message. I know Linphone is actually getting the text message (I can see it in the log!) but it isn’t able to display it. On top of that, there doesn’t seem to be a good way for me to report this bug. But this is OK because I am writing my own app that takes in the text messages directly from voip.ms.
Because I needed to use a resistive touch display and not a capacitive (I need it work with gloves + plastic cover), my choices were rather limited. I ended up going with the ViewSonic TD2210. It works fine out of the box as a virtual mouse. However, it doesn’t tell X11 that it is a “touch” display so APIs like Qt doesn’t interact with it properly (because Qt thinks its just a mouse). Also, if you are doing a triple display, it will see all three 3 displays as a single screen which messes up the touchscreen pointer. You can try to recalibrate the touchscreen via
xinput-calibrator but for some reason, that doesn’t work for this screen (I don’t know why). But I was able to solve it via
xinput map-to-output but I have to run that command at startup.
My employees forget their password all the time. I also forget my own password every now and then. So I decided to go with keycards. The “right” way to do this is via Smarcards and GPG. But it isn’t trivial to get these readers/writers integrated with Kubuntu. So I ended up going with magnetic cards. I bought a MSR605/206 Magnetic Card Reader/Writer and a bunch of MSR90 card readers (which emulated a keyboard input). What I thought I could use was this simple python script to write to the cards. Apparently, the script doesn’t do the LRC checksums! So I had to write my own. So now my employees (and myself) have to swipe their card to login (and there is a separate swipe for decrypting the filesystem).
Learning curve for employees
So far, all the issues in terms of my employees using Linux is basically none. I can safely say that every issue my employee had with using the Linux computers was unrelated to the fact it was running Linux.
For example, one day, one of my employees kept on calling the wrong number. The reason why is because she would write down the phone number on a piece of paper (with one of the digits wrong), typed in the number in Linphone and it would call the wrong number. At first, I thought it was because the “copy/paste” mechanism was unclear to her. But then it turned out that she didn’t have the concept of “copy/paste” to begin with and I never trained her how to use “copy/paste”. So even in a Windows environment, she would have made the same mistake.
Some other thoughts
I would say the biggest issue with running Linux is that you are (almost) alone in term of IT. Unless you are in a major city, it will be hard to hire an IT person that knows Linux well and also lives in the suburbs. Sure, many of them can work remote but not everything can be done remotely. So if there is any issue with any of the computers, it is up to you to figure it out. A shout-out to /r/linuxquestions and /r/linuxhardware for their help; but at the end of the day, they are only remote volunteers and getting hired help that has the knowledge and skills along with living in the suburbs is rather difficult.
Sorry for the long post, and oddly enough there is plenty more to talk about. I guess you can ask me any question in the comments and I can try to answer them.