Install Kubuntu 19.10 and Apps for Web Development

Install, configure, and optimize Kubuntu 19.10 and Apps for Web Development in a few hours.



  • Added Assessment advising against 19.10 due to regressions


  • Add System Settings paths
  • Verified and updated Apt sources
  • Audit through Section 9

Assessment of 19.10 as of 2019-12-02

After extensive testing we do NOT recommend 19.10 for daily use. There are two marjor regressions that remain unresolved.

  1. The CPU throttling on at least some CPUs (confirmed on i7-9750H and i7-8750H) does not work, with the frequency always pegged at maximum. This results in less battery life and higher heat.

  2. Geekbench4 scores are reduced to 50% of their values prior to updates (26K vs. 13K, for example) on these same processors.

We strongly advise using 19.04 or 18.04 where these regressions do not exist.

If you chose 19.10

The 19.10 regressions will result in lower performance and higher power consumption. However, they may be resolved in the near future as we have filed bug reports with Kubuntu developers. There are a few additional Plasma bugs that are annoying (e.g. lock screen image selection) but minor. Using a LiveCD to test the regressions DOES NOT work as they do not occur until after initial updates. We are currently monitoring progress using an alternate 19.10 install.

If you choose 19.04

We found 19.04 very stable and performant over 6 months of average 10 hour days using it. Backports provides most of the desirable new KDE features. However, it has an EOL date of 2020-01-18, and therefore there may not be a direct upgrade path to 20.04 LTS. If you insist on 19.04, you may need to back up data and then install 20.04 LTS fresh in May 2020.

If you choose 18.04

This is also very stable and performant. Backports provides many desirable features, but some from KDE are missing. The upgrade path to 20.04 LTS is obvious.



Provide a complete and thoroughly tested guide to install, configure, and optimize Kubuntu 19.10 (K19-10) and web development tools.

  • Show screen shots for almost every step
  • Ensure answers are thorough and well-researched
  • Provide an explanation for each step
  • Add links to external resources when beneficial

Why this guide?

Because it works. The entire procedure has been end-user-tested five times with the author present. Feedback from these sessions was used to ensure accuracy and minimize the opportunity for mistakes.

Why Kubuntu?

The Plasma Desktop with KDE apps looks great, is easy to use, starts and runs fast, and is easy on resources. Kubuntu is an Ubuntu derivative so it has the widest array of commercial Linux application support available. The Apt package ecosystem is mature and almost all software can be installed with it. Daily updates keep the software current and remove security risks quickly.

Why this Author?

The author has used Unix or Linux as his primary OS for web app development since 1993. He adopted RedHat in 1998 and then Kubuntu in 2006. He has managed the software on multiple Linux clusters with dozens of servers each. He is also RHEL5 certified (giggle if you must) and is the author and maintainer of Kubuntu Preferred Apps Spreadsheet.

How to use this guide

This is a long document with 98 screen shots, and it is far too easy to scroll past a step when using the scrollbar. To avoid this we suggest using using the arrow keys to scroll instead, and pay attention to the step number to ensure it is in order.

Table of Contents

  1. Select Hardware
  2. Prepare Install Image
  3. Review Selected Apps
  4. Create a Virtual Machine
  5. Install Kubuntu 19.10
  6. Apply Updates
  7. Optimize VirtualBox
  8. Add Repos and Install
  9. Configure Plasma
  10. Install Addon Apps
  11. Optimize Apps
  12. Trouble Shooting
  13. Appendix A: Recent Build
  14. Appendix B: ShrinkPDF
  15. Appendix C: Laptop

1. Select Hardware (top)

Select hardware that is tested and compatible with Desktop Linux.

  • CPU: AMD or Intel x86. Both are excellent.
  • GPU: Nvidia or Intel. Prefer Nvidia for superior performance, stability, CUDA, deep learning support. AMD GPUs have gotten much better recently, but the author has not worked with them.
  • Keyboard: We like the Logitech K310 washable keyboard. Of course, just about any keyboard will work just fine.
  • Pointer: We like the Logitech MarbleMouse. The trackball provides great control while avoiding repetitive stress injuries. Again, just about any 3-button or scroll-wheel mouse will work fine.
  • Webcam: We like the Logitech Webcam C615. Works out-of-the-box with Hangouts, Skype, Zoom, and other apps. Includes 1080p/30fps and a good mic.

See Appendix A for my most desktop recent build which has been amazing. See Appendix C if you would like to purchase a ready-to-use laptop. When purchasing a laptop, select one designed and shipped with Linux like those offered by System76, Dell, or Levono. Otherwise, look online to find those that work best with Ubuntu. Make sure key capabilities like screen, WiFi, webcam, trackpad, keyboard, GPU, monitor, battery, and power management are well supported. Do not attempt to install on a recent MacBook Pro. Apple is openly hostile to Linux on their hardware and have ensured the experience is at best miserable and likely impossible.

2. Prepare Install Image (top)

2.1. Download the ISO Image

Download the 19.10 bootable ISO image directly from Kubuntu, it should be named kubuntu-19.10-desktop-amd64.iso. Enter the following into the terminal to ensure the SHA256 checksum matches the one found on this page. The checksum will change as the ISO is updated so please modify the _hash='...' line as needed.

# Change this hash with value provided from
_hash='e56388512a0610bd991192b197a13f1496c107377d9c96d332939c08e305b028' \
&& if ( sha256sum kubuntu-19.10-desktop-amd64.iso |grep -v "${_hash}"); then
  echo "--- Results ---"
  echo 'FAIL. DO NOT USE this ISO, it does not match checksum';
  echo 'Please notify Kubuntu of this issue.'
  echo '--- Results ---'
  echo 'SUCCESS. ISO passes checksum';

2.2. Create Bootable USB Drive

2.2.1. When using a virtual machine

Skip this step. VirtualBox uses the ISO file directly.

2.2.2. When using a physical computer

Insert a small (4-8GB) USB drive into the computer with the downloaded ISO image. When using a the Ubuntu OS, we may install the Start Disk Creator with sudo apt install -y usb-creator-kde. Similar tools are available for other OSes. Select the ISO image and select the USB drive and the click on Make Startup Disk. All content of the USB drive will be replaced in this operation.

2.2.2. Startup Disk Creator

To use the CLI instead, see this Ask Ubuntu answer

3. Review Selected Apps (top)

Review the K19-10 Selected Apps chart below. These apps are installed or optional in the steps below. Adjust as needed. If you feel an app should be here but isn’t, please let me know in the comments!

At present, these are the planned additions: Kubernetes, Azure CLI, AWS CLI, Google Cloud CLI, Zoom, Tensor Flow, Nvidia Developer tools.

Key: repo = standard repo; crepo = custom (added) repo, custom = custom installation; addon = added after repo install

Role Name Source Notes Tags Updated Inc.
Role Name Source Notes Tags Updated Inc.
Audio control pavucontrol repo Pulse audio volume and other settings. audio, volume, mix, gstreamer, pulse audio 2019-10-04 Yes
Android Files kde-connect, mtp-tools repo Android connection. Browser extensions for kde-connect are highly recommended. mtp, android 2019-10-04 Yes
Audio Editing audacity repo Audio editor audio, wav, mp3, ogg 2019-10-04 Yes
Benchmark sysbench repo Benchmark CPU, Disk, MySQL benchmark 2019-10-04 Yes
Blog blog, html, css, github repo Jekyll blog, html, css, github 2019-10-15 Addon
Browser google chrome crepo Best debugger, android integration chrome://inspect browser, v8, html, javascript, css, web 2019-10-04 Yes
Browser firefox, firefox-locale-en repo Firefox browser browser, tracemonkey, spidermonkey, html, javascript, css, web 2019-10-04 Yes
Clean custom repos ppa-purge repo Useful for removing repos and reverting to stock packages. For example, xorg-edgers can be trouble. See note [Q]. ppa, purge, repository, remove 2019-10-04 Yes
Clipboard -- -- Multi-register clipboard is now a core capability of Plasma. Remember to use it! clipboard 2019-10-04 Yes
Codecs codecs repo proprietary codecs kubuntu-restricted-extras, kubuntu-restricted-addons flash, codec, movies, mp3 2019-10-04 Yes
Compression optipng repo Optimize PNG compression png, compress 2019-10-04 Yes
Compression rar repo RAR compression utilities   2019-10-04 Yes
Compression shrinkpdf script We used this to reduce a 5.2MB pdf to .18MB. Amazing. pdf, compression, script 2019-10-04 Addon
SQL Database mariadb, mysql, mysql-server repo MariaDB, MySQL, PostGreSQL are excent options. Use SQLite for embedded. sql 2019-11-02 Yes
SQL Database sqlite repo Embedded SQL sql 2019-11-02 Yes
Database GUI -- -- Use the database tool found in IntelliJ sql 2019-10-08 Yes
Dev - IDE intellij ultimate custom Web application development IDE, best-in-class ease of use and feature. We now use this instead of Webstorm as we need support for more languages. Webstorm, RubyMine, Pycharm, et. al. are subsets. java, python, javascript, css, html, bash, perl, xml, json 2019-10-04 Addon
Dev - Standard build-essential openssh-server wajig repo Install these for app dev env. Remember ssh -X does X11 forwarding (very, very handy!). Make sure this is enabled by the openssh server first though. See this guide: tool chain, ssh, X11 2019-10-04 Yes
Disk bench bonnie++ repo Benchmark disk. benchmark, disk, performance, read, write 2019-10-08 Yes
Disk bench hdparm repo A simpler test: hdparm -t /dev/<disk> and hdparm -T /dev/<disk>. Use sdparm or hdparm -I /dev/sda to identify. benchmark, disk, performance, read, write 2019-10-04 Yes
Doc Conversion pandoc repo Useful to convert markdown -> pdf or other formats. One must install pandoc pandoc-citeproc texlive haskell-platform pdf, html, ODT, RTF, Textile, text, AsciiDoc, Epub 2019-10-04 Yes
Docker docker-ce crepo Industry standard containers. containers, docker 2019-10-04 Addon
Dropbox dropbox crepo Fastest shared file solution dropbox, share, shared, files 2019-10-04 Addon
DVD Rip k3b repo CD and DVD ripper and burner dvd, cd, burn, rip 2019-10-04 Yes
Email Kmail, Kontact repo Bulk mail processing is faster with a local client      
email, gmail, yahoo mail 2019-10-04 Yes        
Encode ffmpeg repo Encoding to mp3, video codecs. Was formerly replaced with a fork of ffmpeg called 'lib-avtools'. Use 'avconv' and 'avplay' mp3, mp4, ffmpeg, avconv, avplay 2019-10-08 Yes
Fonts ttf-mscorefonts-installer repo [YE] Install to get Arial, Courier new, and other standard MS fonts. fonts, truetype 2019-10-04 Yes
Hardware Info hwinfo, lshw, lspci, lsusb, dmidecode repo List motherboard, peripherials, etc. Also try 'cat /proc/cpuinfo' hardware, peripherals, usb, pci 2019-10-04 Yes
Image Edit gimp, gimp-data-extras, gimp-help-en repo, crepo Very Photoshop like and quite compatible with Adobe tools. Use `dbus-launch gimp` if screen capture isn't working. graphics, Photoshop, red eye. CMYK plugin: 2019-10-04 Yes
Image SVG inkscape crepo [S] A very good SVG editor graphics, SVG 2019-10-04 Yes
Java openjdk repo OpenJDK has become standard; if Oracle is needed, see notes install notes below. java, jdk, jre, oracle 2019-10-04 Yes
JSON prettyprint python -- For convenience add this to ~/.bashrc: alias prettyjson='python -m json.tool'. See JSON.stringify(obj, null, 2) for a faster alternative. 2019-10-04 Yes  
Music Player Clementine repo Looks interesting, but we have not used it. mp3, music, album 2019-10-04 Yes
Network Files nfs-common repo NFSv4 Network files system. nfs, nfsv4, filesystem 2019-10-04 Yes
NodeJS nodejs crepo JavaScript web server nodejs, node.js, npm 2019-10-04 Yes
Office Suite LibreOffice repo Version 6.3 Word, Excel, Access, Base, Sheets, Presents, Keynote, Powerpoint 2019-10-04 Yes
Package mgmt apt, dpkg repo See Notes [W] and [X] apt, apt-cache, apt-get, hold, muon, pin, wajig, Discover 2019-10-04 Yes
PDF annotate okular repo Best PDF view/annotator for linux view, annotate, PDF 2019-10-04 Yes
PDF diff diffpdf repo Compare PDF content or visuals diff, compare, PDF 2019-10-08 Yes
PDF Edit pdfshuffler repo See all pdf tools, type pdf<tab> concatenate, rearrange, delete, PDF 2019-10-08 Yes
Power Control upower repo Use 'upower -e' to show devices and upower -i 'device' to inspect. Should be installed by default. See power, laptop, battery, command line, cli 2019-10-08 Yes
Screen measure kruler repo Measure screen distances. Useful for screen captures. ruler, kruler, meausre 2019-10-17 Yes
Screen recording simple screen recorder, obs-studio repo The first (simplescreenrecorder) is easiest to use, the last (obs-studio) was more powerful but more complex and less stable. screencast, recorder, audio, video, capture 2019-10-08 Yes
Slack slack-desktop repo Available in Multiverse as slack-desktop slack 2019-10-08 Addon
Steam steam repo Available in Multiverse as steam-installer steam 2019-10-08 Yes
Source Control git, subversion, gitolite3 repo Use GitoLite as a git repository. Setup is 5 minutes. See and scms, git, svn, subversion 2019-10-08 Yes
Telegram telegram, telegram-cli, telegram-desktop, telegram-purple repo Emerson Pardo recommended Telegram. telegram, messaging, whatsapp 2019-10-08 Addon
Text editor vim or neovim repo We switch between the two. vim, neovim 2019-10-08 Yes
Video Acceleration vdpau repo Provides hardware encoding and decoding gpu, Nvidia, vdpau, encode, decode, hardware 2019-10-08 Yes
Video Chat Hangouts n/a Use Google Hangouts in Google Chrome talk, voice, voip 2019-10-08 n/a
Video Editing kdenlive repo A well respected video editor with significant community support mp4, video 2019-11-02 Yes
Video Encode handbrake crepo Usually better at backing up encrypted content. Previously the Handbrake in the repo had mp4 support disabled. Have not confirmed for 19.10. dvd, burn, rip 2019-10-04 Yes
Video Player vlc repo VLC plays just about all formats. Handy to have around video, movie, playback 2019-10-08 Yes
Visual Diff meld, kdiff3 repo Compare 3 sources across directory trees. Much better than Github when trying understand how things have changed. Meld has a nicer interface, but sometimes Kdiff3 is faster. diff, visual diff, meld, kdiff3 2019-10-08 Yes
Virtual terminal resolution grub repo   grub, grub2, vbeinfo, vga 2019-11-02 Yes
Wallpapers backgrounds repo Various backgrounds are found in /usr/share/backgrounds and /usr/share/wallpapers. ubuntu-wallpapers ubuntu-wallpapers-<release> plasma-workspace-wallpapers 2019-10-08 Yes
Webcam control guvcview repo Great tools for testing webcam webcam, cam 2019-10-08 Yes
Wireframes Balsamiq Mockups custom An easy-to-use wireframe tool. Version 3 provides symbols so that engineering drawing change control is now easier. wireframes, mockups 2019-10-08 Addon
X select xsel repo X selection utility, useful for cut-n-paste for vim xsel, X select 2019-10-08 Yes

4. Create a Virtual Machine (top)

Skip this section when installing on a physical computer.

4.1. Why a virtual machine?

We recommend using a virtual machine to test Kubuntu 19.10 and apps before committing to a full upgrade or installation on a physical computer. Our testing to date has shown all apps work well with just some config adjustments.

4.2. Install VirualBox

When using an Ubuntu 16.04+ derivative (Ubuntu, Kubuntu, Lubuntu, probably Mint and quite a few others) as the Host OS, enter the code below into a terminal to install. For other OSes, see the VirtualBox site.

sudo install virtualbox virtualbox-ext-pack virtualbox-guest-additions-iso
  • virtualbox is the core app
  • virtualbox-ext-pack enables USB2+ and other advanced features
  • virtualbox-guest-additions-iso provides additions used by Guest OS to provide an improved experience.

4.3. Create virtual machine

Start VirtualBox and click on New.

4.3. Create virtual machine

4.4. Set details

Inspect every field here. Try to provide at least 4GB of RAM for testing purpose. Plasma is pretty light on resources, but apps like Gimp and IntelliJ eat lots of RAM when editing large images or projects.

4.4. Set details

4.2.4. Create storage

4.5. Create storage

4.6. Adjust resources

4.6. Adjust Resources 1

4.6. Adjust Resources 2

4.7. Allocate threads

Allocate a minimum of 2 threads.

4.7 Allocate threads 1

4.7 Allocate threads 2

4.8. Configure display

Turn off compositing <shift + alt + f12> on both the host and guest OS to maximize performance. Make sure to select VBoxSVGA as the Graphics Controller and Enable 3D Acceleration. Do not Enable 2D Video Acceleration.

4.8. Configure display

4.9. Configure USB

4.9. Configure USB

4.10. Power-on

4.10. Power-on

4.11. Select Kubuntu 19.10 ISO

4.11. Select Kubuntu 19.10 ISO 1

4.11. Select Kubuntu 19.10 ISO 2

4.12. Click start

4.12. Click start 1

4.12. Click start 2

5. Install Kubuntu 19.10 (top)

5.1. Boot from the USB Drive

5.1.1 When using a virtual machine

VirtualBox prompts for the ISO file to boot from when a new virtual computer is started. Provide the ISO file previously downloaded, e.g. kubuntu-19.10-beta-desktop-amd64.iso.

5.1.2 When using a physical computer

Power-off the target computer and insert the Bootable USB Drive into a USB port and then power-on. One may need to select the boot device (typically using the F12 key) if the installer does not appear and try again.

5.2. Click Install Kubuntu

Once the installer is present, click on Install Kubuntu to begin.

5.2. Click Install Kubuntu

5.3. Select keyboard

This typically requires no changes.

5.3. Select keyboard

5.4. Select default install

Select the default install. Skimping on tools to save perhaps a GB or two of diskspace is hardly worth it. Enable third-party software for graphics, hardware, and media.

5.4. Select default install

5.5. Specify storage

There are a few options to configure storage. Pick one of the two below.

5.5.1. Encrypted storage

Enter the same password in each of the two text boxes. If one clicks Continue and then Back the LVM will be written to disk. Don’t do that, One can use fdisk from the live CD to remove the partitions if needed. More detail is outside of the scope of this article.

5.5.1 Specify encrypted storage

5.5.2. Specify custom partitions

Skip this section if encropted storage was used.

Select Manual and click Continue to partition disk.

5.5.2. Specify custom partition

Click to select the /dev/sda device and click Add. A modal window appears. Set the Size to 8192 MB, set the Type to swap space, and then approve the partition. This swap is used by the system and also is needed (or at least preferred) for the suspend-to-disk feature of the OS.

Click again on the /dev/sda device and click Add. A similar modal window appears. Accept the Size value to use all the remaining space. Set Type to Ext4 and set Mount point to / and then approve the partition.

5.5.2. Add partitions

Click on Install Now. A modal window appears warning that continuing will remove any prior content in the partitions. Click on Continue to proceed.

5.5.2. Commit partitions

5.6. Select time zone

Select a time soon and click Continue.

5.6. Select time zone

5.7. Create admin user

This user is granted admin (sudo) rights.

5.7. Create admin user

5.8. Watch the slide show

A test install with 40MB/s internet and fast hardware took 3 minutes, but it could take quite a bit longer if the storage, internet, memory, or CPU is slow.

5.8. Watch the slide show

More slides appear as the installation progresses. This is normal.

5.8. Keep watching

5.9. Reboot

Elect to reboot the system after installation is complete.

5.9. Reboot

6. Apply Updates (top)

6.1. First sign-in

This sign-in screen should appear 20-30s after boot. Enter the username and password provided earlier.

6.1. First sign-in

6.2. Enjoy the splash screen

On modern hardware this appears appears for less than 5 seconds, and often less than one second. We disable it in the steps below.

6.2. Enjoy the splash screen

6.3. Review desktop

This is the default desktop.

6.3. Review desktop

6.4. Open Discover app

The user is notified of updates on sign-in. One should apply updates updates immediately after install and at the beginning of every work day. Click on Update in the notification to open the Discover software package management app. One can also start Discover from the K-menu at the Bottom Left. Once open, click on Updates at the bottom left of the app to see all updates.

6.4. Open Discover app

6.5. Initiate updates

There should be many updates available (20 or more). Click on Update All at the top right.

6.5. Initiate updates

6.6. Authorize updates

Provide the user password to proceed.

6.6. Authorize updates

6.7. Watch updates progress

The task bar indicator shows percentage completion. Updates should take a few minutes.

6.7. Watch updates progress

6.8. Complete updates and power-off

Successful completion of updates should look like the following screenshot. Reboot the system using K-menu > Leave > Restart.

6.8. Complete updates and power-off

7. Optimize VirtualBox (top)

Skip this section when installing on a physical computer.

7.1. Open guest additions disk

The guest additions appear as an optical disk. Click on the USB icon to access this disk and open it with the file manager.

7.1. Open guest additions disk

7.2. Open terminal

Right click on the file view and select Actions > Open Terminal Here.

7.2. Open terminal

7.3. Install additions

Enter the following into the terminal to install the prerequisite packages.

sudo apt install -y build-essential gcc make perl dkms;

Enter the following into the terminal to install the additions.

sudo ./

Once installation is complete, Reboot the system using K-menu > Leave > Restart. Then in the Virtual Machine menu set:

  • Devices > Shared Clipboard > Bidirectional
  • Devices > Drag and Drop > Bidirectional

8. Add Repos and Install (top)

The Apt software management system in all Debian Linux system is simpler and more complete than other OSes. Almost all third-parties provide Apt support for their software with a few exceptions. Below we add the repos needed for the software we wish to install and keep current. Most of the repos are PPAs. Packages are are signed which greatly reduces the opportunity for a bad actor to insert a Trojan Horse like a key-logger or phone-home feature into them.

The typical way to add a repo is to use the a command like sudo add-apt-repository "${_repo_spec}". This method ensures that encryption keys are added to the package management database. Commercial vendors typically use a similar process but add keys in a separate step. In this guide we use a script to download registered keys all at once.

8.1. Open Konsole

The KDE terminal app is called Konsole. Press <alt + space> and type konsole and then press <enter> to quickly find and start it.

8.1. Open Konsole

8.2. Pin Konsole to Panel

We use the terminal frequently.

8.2. Pin Konsole to Panel

8.3. Update installed packages

Enter the following into the terminal to ensure all packages are current.

sudo apt update && sudo apt upgrade && sudo apt dist-upgrade

8.3. Update installed packages

8.4. Add repo files

Enter the following into the terminal to generate the file ag.txt. Each repository file destined for /etc/apt/sources.list.d us marked by the #_ prefix. subsequent lines are placed in the file. Empty lines and those prefixed by #x are ignored.

echo '#x Last update 2019-11-02
#x   -; see multiverse `steam-installer`
#x   -; was empty and defunct
#x   - google talk plugin which is now deprecated in favor of hangouts
#x [arch=amd64] is used to avoid warnings on some repos.
#x Oracle Java license has changed. If needed, see
#x   and `sudo add-apt-repository ppa:linuxuprising/java`

#_ chrome-remote-desktop.list
deb [arch=amd64] stable main

#_ docker.list
# 2019-11-02 Eoan not yet available
deb [arch=amd64] disco stable

#_ dropbox.list
# 2019-11-02 Eoan, Disco not available
deb [arch=amd64] cosmic main

#_ gimp.list
deb eoan main

#_ google-chrome.list
deb [arch=amd64] stable main

#_ graphics-drivers-ppa.list
deb eoan main

#_ inkscape_dev-stable.list
# 2019-11-02 Disabled until eoan available (use default inkscape)
# deb eoan main

#_ insync.list
deb eoan non-free contrib

#_ kubuntu-ppa-backports.list
deb eoan main

#_ neovim-stable-ppa.list
# 2019-11-02 Enable if desired, Eoan not yet available
# deb eoan main

#_ nodesource.list
deb eoan main

#_ skype-stable.list
deb [arch=amd64] stable main

#_ slack.list
deb jessie main

#_ stebbins-handbrake.list
# 2019-11-02 Eoan not yet available
# deb eoan main

#_ teejee2008-ubuntu-ppa.list
# Provides TimeShift (see var/lib/apt/lists/, wajig detail timeshift)
#   which looks useful
deb eoan main
' > ~/ag.txt

8.4. Add repo files

8.5. Install repositories

Enter the following into the terminal to convert ~/ag.txt to repository definitions.


if ( sudo mv "${_tgt_dir}" "${_bkp_dir}" ); then
  echo "Installing repository files to ${_tgt_dir}";
  sudo mkdir /etc/apt/sources.list.d;
  pushd /etc/apt/sources.list.d > /dev/null;
  grep -Ev '^#x|^\s*$' ~/ag.txt | while read _line; do
    if ( echo "${_line}" | grep -q '^#_' );
        _tgt_file=$(echo "${_line}"|cut -f2 -d' ');
        echo; echo "CREATE ${_tgt_file}";
        echo "${_line}" | sudo tee -a "${_tgt_file}";
  popd > /dev/null;
  echo "Could not move ${_tgt_dir} ${_bkp_dir}. Please try running";
  echo "  'sudo rm -rf ${_tmp_dir} && sudo mv ${_bkp_dir} ${_tmp_dir}'";
  echo "  and then reattempt this action.";

8.5. Install repositories

8.6. Update repository keys

Enter the following into the terminal to install all the keys for the repositories we just added.

sudo ls >/dev/null && if [ 1 ]; then
  sudo apt update 2>&1 | grep NO_PUBKEY | sed -e 's?^.*NO_PUBKEY ??' \
  | while read _hash; do
      wget -O- "${_hash}" \
        | sudo apt-key add -;

8.6. Update repository keys 1

8.6. Update repository keys 2

8.7. Generate ssh keys

Enter the following to create an SSH RSA key. This is required for gitolite3 configuration. When prompted to enter a passphrase, press <enter> both times.

mkdir .ssh;
chmod 700 .ssh;
ssh-keygen -t rsa;

8.7. Generate ssh keys

8.8. Install repo packages

8.8.1. Update packages

Enter the following into the terminal to ensure all packages are current.

sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade

There will be upgrades as we have enabled repos that provide newer versions of software.

8.8.1. Update packages

8.8.2. Install apps

Enter the following into the terminal to install most of the apps specified in the Selected Apps table.

sudo apt install \
  apt-file audacity awscli build-essential clementine diffpdf dmidecode      \
  ffmpeg gimp gimp-data-extras gimp-help-en git gitolite3                    \
  google-chrome-stable guvcview handbrake haskell-platform htop hwinfo       \
  inkscape kdenlive kdiff3 kruler kubuntu-restricted-extras meld mesa-utils  \
  mlocate mtp-tools mariadb-client mariadb-server net-tools nfs-common       \
  openssh-server p7zip-full p7zip-rar pandoc pandoc-citeproc pavucontrol     \
  pdfshuffler ppa-purge rar sdparm steam-installer sqlite sysstat texlive    \
  tree ttf-mscorefonts-installer ubuntu-wallpapers vdpau-driver-all          \
  vdpauinfo vim-gtk vim-nox vim-syntax-gtk wajig xsel                        \

8.8.2. Install apps

8.8.3. Confirm install

8.8.3. Confirm install

8.8.4. Download apps

Installation takes 5-10 minutes.

8.8.4. Download apps

8.8.5. Approve font install

After downloads some packages require the admin to assist in configuration. The MS Font install requires approvals as shown. Press <tab> or the arrow keys to select <OK> and then press <return>. Use the same technique to select and accept <Yes> on the next screen.

8.8.5. Approve font install 1

8.8.5. Approve font install 2

8.8.6. Configure Gitolite3

After downloads some packages require the admin to assist in configuration. GitoLite3 requests the file generated earlier. Navigate the page using <tab> or arrow keys as discussed above.

8.8.6. Configure Gitolite3

If the install completes without asking to configure gitolite, use sudo dpkg-reconfigure gitolite3 to configure. Accept the defaults, but set the pub key to /home/<username>/.ssh/ which we created earlier.

8.8.6. Watch installation progress

Packages installation progress is as shown.

8.8.6. Watch installation progress

8.9. Reboot after installation

Reboot the system once all packages are installed. Click on K-menu > Leave > Restart.

9. Configure Plasma (top)

Warning the images in this section our out of date due to recent Plasma updates (2019-11-02). These will be updated. Until then, be aware that the to some screens and other details may differ from the instructions which are accurate and up to date.

9.1. Configure panel

We prefer the panel on the right side to maximize vertical space. Right click on the panel and select Panel Options > Configure Panel

9.1. Configure panel

9.2. Move panel to right edge

Click on the screen edge button to move the panel.

9.2. Move panel to right edge

9.3. Widen the panel

Widen the panel a bit to allow columns rows in the system tray at the bottom.

9.3. Widen the panel

9.4. Configure desktop

Right-click on the desktop and select Configure Desktop

9.4. Configure desktop

9.5. Change background

We like the picture of the day. Adjust as desired

9.5. Change background

9.6. Hide toolbox

The toolbox can get in the way. After hiding, click OK.

9.6. Hide toolbox

9.7. Open system settings

Open system settings from the K menu and then pin to the task manager.

9.7. Open system settings

9.8. Change theme

System Settings > Global Theme

Select Breeze Dark theme.

9.8. Change theme

9.9. Change cursor size

System Settings > Cursors

We prefer larger cursors for demonstration purposes. Change this in the Size field.

9.9. Change cursor size

9.10. Disable splash screen

System Settings > Startup and Shutdown > Splash Screen

The splash screen only shows for a second or so on modern hardware. Disabling removes visual noise.

9.10. Disable splash screen

9.11. Set Colors

System Settings > Colors

This should already be set to Breeze Dark.

9.11. Set Colors

9.12. Set Fonts

System Settings > Fonts

Those with 4K monitors may wish to scale their interface. The best method we have found is to adjust the DPI value under fonts and leave System Settings > Displays > Scale Display alone.

9.12. Set Fonts

9.13. Set Icons

System Settings > Icons

This should already be set to Breeze Dark.

9.13. Set Icons

9.14. Set GTK style

System Settings > Application Style > GNOME/GTK Application Style.

Set the GTK2 and GTK3 themes to Breeze-Dark. Also select Prefer dark theme. Choose Breeze Dark for the icon theme as well. This is required to ensure GTK apps such as Firefox, Chrome, and LibreOffice use a dark theme.

9.14. Set GTK style

9.15. Set Window Decorations

System Settings > Application Style > Window Decorations

This should already be set to Breeze. We recommend adjusting

9.15. Set Window Decorations

9.16. Use Workspace defaults

System Settings > Workspace Behavior > General Behavior

Use workspace default settings as shown.

9.16. Use Workspace defaults

9.17. Adjust window edges

System Settings > Workspace Behavior > Screen Edges

Turn off maximize features. Instead, prefer to use <meta + leftarrow> or <meta + rightarrow> to tile windows. One can also click with the middle or right mouse button on the maximize-window control to toggle a window vertically or horizontally.

9.17. Adjust window edges

9.18. Set screen lock

System Settings > Workspace Behavior > Screen Locking

Click on the Appearance tab inn top middle and set the background to match the desktop.

9.18. Set screen lock

9.19. Add virtual desktops

System Settings > Workspace Behavior > Virtual Desktops

Add four rows and rename as desired. Use slide animation and wrap-around navigation.

9.19. Add virtual desktops

9.20. Test sound

System Settings > Audio

Click on the Advanced tab and click on Front Left and Front Right buttons to test audio output.

9.20. Test sound

9.21. Configure pager

Close system settings. Right click on the virtual desktops in the panel and select Configure Pager. Click to display the desktop name.

9.21. Configure pager

9.22. Move pager widget

Right click on the panel and select Panel Options > Configure Panel and then drag the pager widget (which shows the virtual desktops) down to just above the system tray.

9.22. Move pager

9.23. Review the results

The pager is now just above the system tray.

9.23. Review the results

10. Install Addon Apps (top)

10.1. Docker

Enter the following into the terminal to install Docker. The required repo already added in Add Repos and Install.

sudo apt -y install docker-ce

10.2. Dropbox

Enter the following into the terminal to install Dropbox and start the service. The required repo already added in Add Repos and Install.

sudo apt install -y dropbox && dropbox start -i

Agree to install and start the dropbox daemon. After the daemon is installed, a browser window opens prompting the user to authorize the Dropbox folder. Enter the username and password to attach a Dropbox account or create an account if needed.

10.3. Balsamiq

Baslamiq is not a repo install and requires a bit more work. This site showed us the way.

10.3.1. Install wine packages

Enter the following into the terminal to install wine with a boatload of i386 packages. Wait for the installation to complete before proceeding.

sudo apt install -y wine-stable winetricks

10.3.1. Install wine packages 1

10.3.1. Install wine packages 2

10.3.2. Download Balsamiq Bundle

Download Adobe Air from the Balsamiq Site by clicking the link With Adobe Air bundled under the section Other Windows Installers. If prompted to agree to the Balsamiq terms of use, Click I Agree to continue. A zip file should be downloaded.

10.3.2. Download Balsamiq bundle

10.3.4. Install to /usr/local/lib

Enter the the following in a terminal to install Balsmiq into /usr/local/lib Beware that we may need to change names and links if the downloaded file changes. For example, if the download file is updated to verion 3.5.18, we should use baslamiq_3_5_18 for our symbolic link and update the source filename as well.

sudo ls >/dev/null && if [ 1 ]; then
  pushd /usr/local/lib;
  sudo /bin/rm -rf "${_dir}";
  if ( sudo unzip ~/Downloads/"${_src}" ); then
    sudo ln -s "${_dir}" "${_tgt}";
    sudo ln -s "${_dir}" balsamiq
    pushd /usr/local/lib/balsamiq
    sudo ln -s 'Balsamiq Mockups 3.exe' balsamiq.exe
    _result='SUCCESS: Balsamiq installed and links configured';
    _result='FAIL: Balsamiq install, could not unbundle';
  _result='FAIL: Balsamiq install, no sudo rights';
echo "${_result}";

10.3.5. Add desktop file

Enter the following into the terminal to install a desktop file so one can easily access the app from the K-menu. We use symbolic links for references so we should not need to update this file.

echo '[Desktop Entry]
Name=Balsamiq Mockups
Exec=wine '/usr/local/lib/balsamiq/Balsamiq Mockups 3.exe'
MimeType=application/x-xdg-protocol-tg;x-scheme-handler/tg;g;' \
  | sudo tee /usr/share/applications/balsamiq.desktop

10.3.5. Add desktop file

10.3.6. Start Balsamiq

After wine installation is complete, Start Balsamiq with the K-menu (shown); or by typing <alt + space> followed by bals and then pressing <enter>; or by typing balsamiq followed by <enter> in the terminal.

10.3.6. Start Balsamiq 1

10.3.6. Start Balsamiq 2

10.4. IntelliJ

10.4.1. Download IntelliJ Ultimate

IntelliJ Ultimate is a great productivity tool in our experience. A free 30 trial is provided, and an individual license is $149 a year. For us, it is much worth it. Other Jetbains options include Webstorm, Pycharm, Rubymine, and others. We might consider Komodo IDE , Eclipse, KDevelop, or others, but we do not have recent experience with them. Download from the JetBrains website.

10.4.1. Download IntelliJ Ultimate 1

Save the download as file.

10.4.1. Download IntelliJ Ultimate 2

Enter the following into the terminal to ensure the SHA256 checksum matches the one provided by JetBrains (click on the SHA256 link). The checksum will change as the package is update, so please modify the _hash='...' line accordingly.

# Change this hash with value provided from JetBrains
pushd ~/Downloads
_hash='102a925396f2edd5d67b823fe14f3547e3d109c2a63a313c81fa2185cf8b98a1' \
&& if ( sha256sum ideaIU-2019.2.4.tar.gz |grep -v "${_hash}"); then
  echo '--- Results ---'
  echo 'FAIL. DO NOT USE this package, it does not match checksum.';
  echo 'Please notify JetBrains of this issue.'
  echo '--- Results ---'
  echo 'SUCCESS. Package passes checksum.';

10.4.2. Install to /usr/local/lib

Enter the following into the terminal to install IntelliJ to /usr/local/lib.

sudo tar xvzf ~/Downloads/ideaIU-2019.2.4.tar.gz -C /usr/local/lib

10.4.2. Install to /usr/local/lib 1

10.4.2. Install to /usr/local/lib 2

Symbolic links ensures the paths used by the desktop do not change. We update the link to new pointers when we upgrade IntelliJ. Notice the IntelliJ release number (192.6817.14 in the code below) changes with every release and the _tgt_dir variable must be changed when that happens. Enter the following into the terminal create the desired links.

_tgt_dir="idea-IU-192.7142.36" && sudo ls >/dev/null && \
  if [ -d "/usr/local/lib/${_tgt_dir}" ]; then
    sudo /usr/bin/rm /usr/local/lib/intellij
    pushd /usr/local/lib; sudo ln -s "${_tgt_dir}" intellij; popd
    if [ ! -L /usr/local/bin/intellij ]; then
      pushd /usr/local/bin;
      sudo ln -s ../lib/intellij/bin/ intellij;
    if [ ! -d /usr/local/img ]; then
      sudo mkdir -p /usr/local/img;
      pushd /usr/local/img;
      sudo ln -s ../lib/intellij/bin/idea.svg ./intellij.svg;
    echo "--- Results ---";
    echo "SUCCESS: Installed IntelliJ symlinks";
    echo "--- Results ---";
    echo "FAIL   : Installed IntelliJ symlinks";
    echo "  Please ensure distribution has been installed at ${_tgt_dir}";
    echo "  Update the version if needed in this script and try again.";

10.4.3. Create symbolic links

10.4.4. Add desktop file

Enter the following into the terminal to install a desktop file so one can easily access IntelliJ from the K-menu. We use symbolic links for references so we do not need to update this file.

echo '[Desktop Entry]
Exec="/usr/local/bin/intellij" %f
Comment=Develop with pleasure!
StartupWMClass=jetbrains-intellij' \
  | sudo tee /usr/share/applications/jetbrains-intellij.desktop

10.4.4. Add desktop file

10.4.5. Start IntelliJ

Start IntelliJ with the K-menu (shown); or by typing <alt + space> followed by intellij and then pressing <enter>; or by typing intellij followed by <enter> into the terminal.

10.4.5. Start IntelliJ

10.5. Google Drive (Insync)

Insync provide reliable sync to Google Drive with an unlimited number of accounts. It costs $30 per year and provides automatic conversion to LibreOffice files. Enter the following into the terminal to install insync and the file manager integration.

sudo apt install -y insync insync-dolphin && insync start

We prefer to use Dropbox over GDrive for many uses. GDrive is around 20x slower than Dropbox for when syncing file. In addition Google scans everything put into GDrive whereas Dropbox does not.

10.6. Jekyll for Blogs

Enter the following into the terminal to install Jekyll for use with Github blogs.

sudo apt install jekyll && sudo gem install jekyll-sitemap

After installation is complete, one can start Jekyll in an appropriate directory and then visit localhost:4000 with a browser to actively develop a Jekyll site. This process was used to create this document.

cd Githug/ # Adjust path as needed
jekyll serve

10.7. MongoDB

Sources have been included in the installation shown above. See Read the documentation on ulimit to improve performance

10.8. Slack

Enter the following into the terminal to install this reliable Electron app.

sudo apt install -y slack-desktop

10.8. Slack

10.9. shrinkpdf

Use this app to substantially reduce PDF size. Enter the following into the terminal to create and /usr/local/bin/shrinkpdf.

# Subsitute vi, emacs, nano, etc for kate
sudo touch "${_tgt}";
sudo chmod 755 "${_tgt}";
sudo kate "${_tgt}";

Next copy the contents of Appendix B into the file. Save it and close the editor. One can now test shrinkpdf on PDF documents.

10.10. Telegram

Enter the following into the terminal to install Telegram.

sudo apt install -y telegram-desktop

10.10. Telegram

11. Configure and Optimise (top)

Enter the following into the terminal to configure the MarbleMouse. Skip this step there is no MarbleMouse. See also Ubuntu and Acceleration concepts for increasing acceleration.

sudo apt install -y xserver-xorg-input-evdev
echo 'Section "InputClass"
        Identifier  "Marble Mouse"
        MatchProduct "Logitech USB Trackball"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "ButtonMapping" "1 8 3 4 5 6 7 2 2"
        Option "EmulateWheel" "true"
        Option "EmulateWheelButton" "8"
        Option "ZAxisMapping" "4 5"
        Option "XAxisMapping" "6 7" # Disable for vertical-only scrolling
        Option "Emulate3Buttons" "false"
' | sudo tee /usr/share/X11/xorg.conf.d/50-marblemouse.conf

11.1. Config MarbleMouse

After dropbox has synced, we can link config files from Dropbox. This helps minimize variance from one environment to another. We must create these files into Dropbox first. Please skip this section if these files have not been created in the Dropbox folder.

for _i in bashrc gitconfig vimrc;
  do _tgt=".${_i}";
  if [ -e "${_tgt}" ] && ! [ -L "${_tgt}" ]; then mv "${_tgt}" "${_tgt}.O"; fi
  rm -f "${_tgt}"; ln -s "Dropbox/01_SharedConfig/${_i}" "${_tgt}";
  if [ -e "${_tgt}.O" ]; then
    echo "Merge old config into linked ${_tgt}.";
    echo "To keep all changes, just close Meld.";
    echo "Press <enter> to continue.";
    read -r _ignore;
    meld "${_tgt}.O" "${_tgt}";

11.3. Set IntelliJ dark theme

Start IntelliJ and then select File > Settings > Editor > Color Scheme > Darcula.

11.3. Set IntelliJ dark theme

11.4. NFS - Add Network Disks

11.4.1. Install the nfsv4 client

Enter the following into the terminal to ensure the NFSv4 client is installed.

sudo apt-get install -y nfs-common

11.4.2. Add NFS drives

Any drive in /etc/fstab marked with a _netdev will not be mounted until the after the network is available. This is needed for NFS and other network file systems. See Ubuntu NFSv4 and NFSv4 at Boot.

Add NFS drives in /etc/fstab, one per line, using the following format.

<nfs_server>:<export_dir> <mount_dir> nfs _netdev,auto 0 0

11.5. Optimize Chrome GPU

This is verified with Nvidia GPUs and drivers. Intel mostly works (this is noted below). I do not have and recent experience AMD GPUs (thanks to my past experience with AMD GPUs and Linux).

11.5.1. VDPAU

Enter the following into the terminal to ensure VDPAU drivers are installed.

sudo apt install -y vdpau-driver-all vdpauinfo

11.5.2. Change Chrome flags

Enable all GFX acceleration in Chrome. Check GPU status with chrome://gpu. Adjust flags to enable GPU capabilities in chrome://flags and enable these flags. These names are exact as of Chome 77.

  • GPU Rasterization
  • Native client
  • Out of ordered rasterization
  • Override software rendering list
  • Skia API for OOP-D compositing
  • Zero-copy rasterizer

11.5.3. Update desktop file

Enter the following into the terminal to edit the google-chrome desktop file.

sudo kate /usr/share/applications/google-chrome.desktop

Replace Exec=/usr/bin/google-chrome-stable with Exec=/usr/bin/google-chrome-stable --enable-native-gpu-memory-buffers --enable-zero-copy. There are be 3 replacements.

Enter the following into the terminal to find and (optionally) delete any google-chrome.desktop files that could override the system file.

sudo rm -i $(sudo updatedb && locate google-chrome.desktop \
  | grep -v '/usr/share/applications' )

11.5.3. Update desktop file

11.5.4 Confirm results

See chrome://gpu to confirm the following results.

# Canvas                           : Hardware accelerated
# Flash                            : Hardware accelerated
# Flash Stage3D                    : Hardware accelerated
# Flash Stage3D Baseline profile   : Hardware accelerated
# Compositing                      : Hardware accelerated
# Multiple Raster Threads          : Enabled
# Out-of-process Rasterization     : Hardware accelerated
# Hardware Protected Video Decode  : Hardware accelerated
# Rasterization                    : Hardware accelerated
# Skia Renderer                    : Enabled
# Video Decode                     : Hardware accelerated
# Viz Display Compositor           : Enabled
# Viz Hit-test Surface Layer       : Enabled
# WebGL                            : Hardware accelerated
# WebGL2                           : Hardware accelerated

IMPORTANT: Disable desktop compositing <shift + alt + f12> to maximize OGL/Vulcan perf. Frame rates can increase by 10x in some cases.

11.5.4 Confirm results 1

11.5.4 Confirm results 2

At this point, all the apps from the table are installed and optimized.

11.6. Additional tweaks See Plasma Tips for additional tweaks, especially for Chrome.

12. Trouble Shooting

Starting Kmail


When starting Kmail, Akonadi errors on start-up. This appears to be a problem due to using MySQL instead of the now default MariaDB.


Edit ~/.local/share/akonadi/mysql.conf and comment out the following lines:

# log_warnings=2
# lower_case_table_names=1
# query_cache_size=0
# query_cache_type=0

2019-10-22 Kmail and Gmail


Adding a Gmail account to Kmail was failing with a message that Google does not recognize Kmail as a trusted app. See this bug report.


  1. Enable less secure apps. One may need to approve via an email sent to the gmail account used. Grant approval.
  2. In Kontact, add the Google account by clicking on Settings > Configure Kmail > Receiving > Add. A window will popup to request Gmail authorization. Enter your details. A warning will be returned that states Sign in with Google temporarily disabled for this app. This app has not yet been verified by Google in order to use Google Sign in. Click on cancel and proceed to decline encryption (this can be added later if desired).
  3. After adding the account, in Receiving tab click on the account just added and click Modify.
  4. A modal window will appear. Click on the Advanced tab and then under Connection Settings click on Auto Detect. Next, in the Authentication pulldown near the bottom, select PLAIN.
  5. On the Sending tab, click on the account and then click Modify. This will bring up a modal window.
  6. Under the Advanced table, click Auto Detect at the top.
  7. Click Ok to clse the modal, and OK to close the account setting window.

Syncing should start and sending emails should work.

2019-10-22 Kmail and Yahoo


After adding a Yahoo acount Kmail reports that it Could not connect to the IMAP server....


This arises because Yahoo now uses App passwords.

  1. Log in to Yahoo mailbox and click on your name at the top-right corner. Click on Account Info to go to that page.
  2. Choose Account Security and then Manage App Passwords.
  3. Select Other as your app name and provide Kmail as the app name. Then request the password.
  4. Copy the provide password to the clipboard.
  5. In Kontact, add the Yahoo account by clicking on Settings > Configure Kmail > Receiving > Add. Provide your normal username, but use the App password copied above.

Syncing should now start and sending emails should work.

Appendix A: Recent Build (top)

Return to Section 1.

All items were purchased from NewEgg and built in July 2019.

Case: Fractal Design Meshify S2

Black ATX Modular High-Airflow Tempered Glass Window Mid Tower Computer Case

CPU: Intel Core i9-9900K

Intel Core i9-9900K Coffee Lake 8-Core, 16-Thread, 3.6 GHz (5.0 GHz Turbo) LGA 1151 (300 Series) 95W BX80684I99900K Desktop Processor Intel UHD Graphics 630

CPU Cooler: EVGA CLC 240mm All-In-One

EVGA CLC 240mm All-In-One RGB LED CPU Liquid Cooler, 2x FX12 120mm PWM Fans, Intel, AMD, 400-HY-CL24-V1

Display: Dell 34” 3440x1440 Monitor

Dell U3417W 34” 3440x1440 2K Resolution 60Hz 5ms DisplayPort Mini-DisplayPort 2xHDMI USB 3.0 Hub Built-in Speakers White Edgelit LED IPS Curved Monitor

GPU: EVGA GeForce RTX 2080 Ti XC Hybrid

EVGA GeForce RTX 2080 Ti DirectX 12 11G-P4-2384-KR 11GB 352-Bit GDDR6 PCI Express 3.0 HDCP Ready XC HYBRID GAMING, 11GB GDDR6, HYBRID & RGB LED

Keyboard: Logitech K310

Washable full-feature keyboard.

Motherboard: ASUS ROG Strix Z390-E Gaming

ASUS ROG Strix Z390-E Gaming LGA 1151 (300 Series) Intel Z390 SATA 6Gb/s ATX Intel Motherboard

Pointer: Logitech MarbleMouse

We love the Logitech MarbleMouse. The trackball provides great control while avoiding repetitive stress injuries.

PSU: EVGA SuperNOVA 850 G2

220-G2-0850-XR 80+ GOLD 850W Fully Modular EVGA ECO Mode Includes FREE Power On Self Tester Power Supply

RAM: G.SKILL TridentZ 64GB 3600 MHz

G.SKILL TridentZ Series 64GB (4 x 16GB) 288-Pin DDR4 SDRAM DDR4 3600 (PC4 28800) Intel Z370 / X299 Desktop Memory Model F4-3600C17Q-64GTZKW

Storage: SAMSUNG 970 PRO M.2 1TB

SAMSUNG 970 PRO M.2 2280 1TB PCIe Gen3. X4, NVMe 1.3 64L V-NAND 2-bit MLC Internal Solid State Drive (SSD) MZ-V7P1T0BW

UPS: CyberPower 1500VA

Webcam: Logitech Webcam C615.

Works out-of-the-box with Hangouts, Skype, Zoom, and other apps. Includes 1080p/30fps and a good mic.

Return to Section 1

Appendix B: ShrinkPDF (top)

Content for the shrinkpdf file. Return to Section 10.9 Shrinkpdf

# Licensed under the 3-clause BSD license:
# Copyright (c) 2014, Alfred Klomp
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright notice,
#    this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.

# Low dpi (72) = better compression. High (300) = better quality

shrink () {
  gs \
    -q -dNOPAUSE -dBATCH -dSAFER        \
    -sDEVICE=pdfwrite                   \
    -dCompatibilityLevel=1.3            \
    -dPDFSETTINGS=/screen               \
    -dEmbedAllFonts=true                \
    -dSubsetFonts=true                  \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution="${_dpi}"    \
    -dGrayImageDownsampleType=/Bicubic  \
    -dGrayImageResolution="${_dpi}"     \
    -dMonoImageDownsampleType=/Bicubic  \
    -dMonoImageResolution="${_dpi}"     \
    -sOutputFile="${2}"                 \

check_smaller () {
  # If $1 and $2 are regular files, we can compare file sizes to
  # see if we succeeded in shrinking. If not, we copy $1 over $2:
  if [ ! -f "${1}" -o ! -f "${2}" ]; then
    return 0;
  ISIZE="$(echo $(wc -c "${1}") | cut -f1 -d\ )";
  OSIZE="$(echo $(wc -c "${2}") | cut -f1 -d\ )";
  if [ "${ISIZE}" -lt "${OSIZE}" ]; then
    echo "Input smaller than output, doing straight copy" >&2
    cp "${1}" "${2}";

usage () {
  echo "Reduces PDF filesize by lossy recompressing with Ghostscript.";
  echo "Not guaranteed to succeed, but usually works.";
  echo "  Usage: ${1} infile [outfile]";


# Set input file name
if [ -z "${IFILE}" ]; then
  usage "${0}";
  exit 1;

# Default output filename to - (stdout) unless given
if [ ! -z "${2}" ]; then

shrink "${IFILE}" "${OFILE}" || exit $?;
check_smaller "${IFILE}" "${OFILE}";

Return to Section 10.9 Shrinkpdf

Appendix C: Preloaded Kubuntu 19.10 Laptop (top)

If you would like to purchase a preconfigured Kubuntu 19.10 laptop with the OS and all the apps installed and tested please send a message. Here is what we have in testing right now. A similarly equipped 15” MacBook Pro cost $900 more, yet this laptop has copius highly currated software, a vastly superior GPU, better Geekbench scores, a much better keyboard, and is more compatible with AWS, Azure, and Google Cloud deployment platforms.

  • CPU: Core i7-9750H 6c/12t 4.5GHz
  • GPU: 6GB GTX-2060
  • RAM: 32GB Dual Channel DDR4 2666 RAM
  • Storage: 1TB Samsung 970 EVO Plus NVMe
  • Display: 16.1” matte 1080p
  • Backlit keyboard
  • LED backlit keyboard
  • Thin matte black (metal and plastic, 0.78”)
  • Broad suite of currated apps preloaded
  • Two year waranty
  • User expandable SDD, NVMe, and RAM
  • Superior cooling
  • Estimated $2,399 ($900 less than MBP)



  • Added Assessment advising against 19.10 due to regressions


  • Add System Settings paths
  • Verified and updated Apt sources
  • Audit through Section 9


End (top)

Written on October 4, 2019