X11VNC for Linux setup notes

x11vnc is a relatively smooth experience, but there are quite a few common use cases that would have been automated away if it’s a Windows program, namely have it start as a service on boot (before logging in)

It’s from babelmonk’s solution on StackExchange. Paraphrased here to make it easier to understand:

After installation, create the password file with -storepasswd switch AND specify the where you want the password saved as an optional argument, and I prefer /etc/x11vnc.pass:

sudo x11vnc -storepasswd {your password goes here} /etc/x11vnc.pass

which will be read by -rfbauth switch for the x11vnc program.


Build your own (systemctl) service by creating /etc/systemd/system/x11vnc.service:

[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
Restart-sec=2

[Install]
WantedBy=multi-user.target

Then, start with:

sudo systemctl daemon-reload
sudo systemctl start x11vnc

Enable the service (if not already done by previous commands) so it will start on boot

sudo systemctl enable x11vnc

Loading

Acrobat reader on Linux

Adobe gave up supporting Acrobat reader for Linux long time ago, so it’s stuck at the old 32-bit version (9.5.5):

http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb

ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb

The tutorial websites tells you to use wget, but sometimes you might run into authentication problems. You can simply use the links above and double-click the .deb file to install.

Nonetheless, it doesn’t work right out of the box in modern 64-bit Linux. You’ll run into a missing library

libxml2

on run because you didn’t install the 32-bit version of it. Enable i386 (x86 or 32-bit) packages first then get the 32-bit library:

dpkg --add-architecture i386
apt-get install libxml2:i386 ia32-libs

There are some GTK complaints if you run it on a command line, but it doesn’t affect the uses so you can safely ignore them

Loading

[Deprecated] systemd-resolved DNS resolution nightmare

Linux Mint 19 does not resolve local hostsnames (nothing to do with SMB, which does not rely exclusively on DNS) out of the box! Damn. MX Linux does.

systemd-resolve, which act as a local DNS server on 127.0.0.53, despite it points to the DNS server assigned by the router’s DHCP (aka, the router’s IP address itself), managed not to resolve the local hostnames out of the box!

Time to disable this mofo (no need to mess with /etc/nsswitch.conf and install Winbind to use WINS):

Disable and stop the systemd-resolved service:

sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved

Then put the following line in the [main] section of your /etc/NetworkManager/NetworkManager.conf:

dns=default

Delete the symlink /etc/resolv.conf

sudo rm /etc/resolv.conf

Restart NetworkManager

sudo systemctl restart NetworkManager

I know it has good reasons to exist (like breaking VPN ties), but if Linux Mint decide to have it on as out-of-the-box defaults, at least tell the users that local network DNS resolution won’t work by default!

This is a choice that caters the 5% elite at the expense of frustrating 95% of the target audience!

There’s a new way to do it. See this blog post.

Loading

Windscribe Linux breaks internet (messed up DNS resolution) on first use

I lost the internet (actually just DNS not resolving correctly) after installing Winscribe for Linux and disconnecting the session. WTF windscribe! I know it’s beta version, but at least you should check if it bricks people’s internet after a fresh install and first use!

Turns out that on first connection, it re-binds /etc/resolv.conf to /run/resolvconf/resolv.conf which has this line:

# Generated by resolvconf
nameserver 10.255.255.2

So like systemd-resolve, Windscribe lets resolvconf steal the DNS redirection that’s supposed to go straight to my router to an intermediary 10.255.255.2 that doesn’t do the job! Aargh!

To fix it (needs to be done every time after a Windscribe connection, so I’m getting rid of this lamely written Windscribe CLI for now), remove the symlink /etc/resolv.conf:

sudo rm /etc/resolv.conf

and restart NetworkManager

sudo systemctl restart NetworkManager

so NetworkManager will re-generate /etc/resolv.conf directly (no symlink) with the correct name server from the GUI config program (in my case, automatically obtained from my router).

Turns out it’s a common scene that in Linux, many DNS resolution program fight over the control over /etc/resolv.conf. NetworkManager kicks in after you disabled the rest.

Loading

Bitlocker for Linux (Dislocker -> Ubuntu Cinnamon Remix)

I regularly consolidate my disk drives to higher capacities as they are available to reduce the complexity managing many controllers, so I’ll often have to wipe the drives before I sell them (trade up). Often they are sold at very little moment’s notice, sanitizing the data might take too long. I learned that if I encrypt my data drives, I don’t really have to do much other than just clearing out the partition before I sell them, and there’s little performance penalty for Bitlocker in modern hardware.

Right now dislocker (Linux version of bitlocker) does not have a GUI to automatically unlock and mount the encrypted drives. Here’s the script that has the form “BL_{drive name}.sh” that will unencrypt the device and mount it and at the same time creating the script in the same folder to unwind (unmount & lock) the drive.

#!/bin/bash

# Extracting partition name from file name (BL_*.sh)
FN_base="$(basename -- $0)"
FN_bare="${FN_base%.*}"
partition=${FN_bare/BL_/}

# TODO: Check with /dev to make sure it's legit
echo $partition
dev_partition="/dev/$partition"

# Unlock the device into a raw image 'file'
path_raw="/media/dislocker/raw_$partition"
sudo mkdir -p $path_raw

file_raw="$path_raw/dislocker-file"
sudo dislocker $dev_partition -u -- $path_raw

# Mount the image file as a disk
path_mount="/media/dislocker/mount_$partition"
sudo mkdir -p $path_mount

sudo mount -o loop $file_raw $path_mount

# Build wind down file
script_unwind="unwind_$partition.sh"
# Leave /media/dislocker there for isolation
echo "#!/bin/bash"             > $script_unwind
echo "sudo umount $path_mount">> $script_unwind
echo "sudo rmdir $path_mount" >> $script_unwind
# Note that the website is wrong. umount the path, not the dislocker-file
echo "sudo umount $path_raw"  >> $script_unwind
echo "sudo rmdir $path_raw"   >> $script_unwind
# Make sure the "$0" is literal including the $ sign or it will
# delete this file instead of the unwind_sd*.sh file
echo "sudo rm -- \"\$0\""     >> $script_unwind
chmod +x $script_unwind


There are reports that newer zuluCrypt can now do bitlocker volumes. Will get back to that later.

I tried to get zuluCrypt on Linux Mint and ran into a few quirks

  • They claim zuluCrypt after 5.7.1 and above supports Bitlocker
  • Linux Mint 20.1 (Ulyssa)’s package repositories are conservative. It only supports up to zuluCrypt 5.7 when 6.0 is out
  • Zulucrypt’s website says you still need dislocker backend for zuluCrypt use Bitlocker
  • Nonetheless after these requirements are done, I cannot unlock a Bitlocker drive. The error message says it’s ‘missing a parameter’. What parameter?
  • I figured that the Bitlocker malfunction might be solved with 6.0 so I tried to download the .deb files from zulucrypt’s website for 6.0. It’s missing a bunch of dependencies that are NOT SATISFIABLE, including a libqt5 dependency that’s nowhere to be found. I found the .deb file yet there’s a chain of dependencies that also cannot be found
  • I tried to get the cryptsetup (LUKS) referred by Zulycrypt’s website but it has its down dependencies problem
  • So to install zulycrypt 6.0, I have no easy option other than moving to Ubuntu.
  • I chose Mint because Ubuntu’s UI defaults are annoying to Windows users from my previous experiences, the glitches and a lot of missing options in their default GUI programs frustrates me.
  • So I wondered if I can install Cinnamon (Mint’s core interface) on Ubuntu so I can get the latest and the greatest packages without waiting for the authority of Linux Mint to implement them.

Turns out there’s already a linux distro that’s uses Cinnamon on Ubuntu by default! It’s called “Ubuntu Cinnamon Remix“! Even better, after I’ve installed it, I realized I don’t have to muck with the dislocker/zulucrypt/cryptsetup/LUKS shit at all! Bitlocker just work right out of the box! When you click on the Bitlocker encrypted volume, it will prompt you for the password and that’s it!

FULL DISK ENCRYPTION IS BUILT IN Ubuntu Cinnamon Remix 20.04!

Loading