Software

In the past, I’ve written about different remote desktop products/solutions, including NoMachine for remoting into traditional desktop machines, but also a few alternatives for accessing and controlling Android devices from a computer. Today I’d like to mention TeamViewer, a product free for non-commercial use that supports computer to computer, Android to computer, and computer to Android connections.

The following screenshots were taken on a macOS Sierra machine remotely logged onto a rooted Samsung Galaxy S4 Android tablet.

  1. Download the SDelete program provided by Microsoft onto your Windows Guest machine.
  2. Clean up unnecessary files and programs. One useful utility is WinDirStat.
  3. Run the following command in the terminal to write zeroes over unused disk storage in your Windows guest:
    sdelete64 -z c:
  4. Shut down your VM and run the following command on your Windows Guest VDI:
    VBoxManage modifyhd /misc/virtualbox-vms/Windows10/Windows10LargeDisk.vdi
  5. Create a new VDI with the new desired maximum size:
    VBoxManage createhd --filename /misc/virtualbox-vms/Windows10/Windows10Disk.vdi --size 92160
  6. Clone the existing VDI into the newly allocated one:
    VBoxManage clonehd /misc/virtualbox-vms/Windows10/Windows10LargeDisk.vdi /misc/virtualbox-vms/Windows10/Windows10Disk.vdi --existing

A useful feature native feature of Chrome is its ‘Task Manager’, which allows one to monitor all Chrome processes and their resource consumption:
Google Chrome Task Manager

Firefox has been slow to adopt parallel functionality, though this is mostly that multi-process mode in Firefox hadn’t become available until recently (at least in non-Nightly releases). One still needs to install this Task Manager Firefox add-on — though I would not be surprised to see if this became built-in to Firefox sometime in the near future.

Firefox Task Manager

  1. Enroll in Apple’s Beta Software Program.
  2. Download a fresh copy of VMware Workstation Player for Windows or Linux from the official VMware site. The free trial of this product has no expiration if used for non-commercial purposes.
  3. You’ll need to unlock your installation of VMware to use Mac operating system as a guest following these instructions (external link).
  4. On a computer running an official/genuine instance of OS X, download macOS Sierra from the App Store:
    App Store - macOS Sierra
  5. Once the download completes, open the Terminal application, and either save a new file with the following contents,
     #!/bin/bash
    # Mount the installer image
    hdiutil attach /Applications/Install\ macOS\ Sierra.app/Contents/SharedSupport/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/install_app
    
    # Create the macOS-Sierra Blank ISO Image of 7316mb with a Single Partition - Apple Partition Map
    hdiutil create -o /tmp/macOS-Sierra.cdr -size 7316m -layout SPUD -fs HFS+J
    
    # Mount the macOS-Sierra Blank ISO Image
    hdiutil attach /tmp/macOS-Sierra.cdr.dmg -noverify -nobrowse -mountpoint /Volumes/install_build
    
    # Restore the Base System into the macOS-Sierra Blank ISO Image
    asr restore -source /Volumes/install_app/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase
    
    # Remove Package link and replace with actual files
    rm /Volumes/OS\ X\ Base\ System/System/Installation/Packages
    cp -rp /Volumes/install_app/Packages /Volumes/OS\ X\ Base\ System/System/Installation/
    
    # Copy macOS Sierra installer dependencies
    cp -rp /Volumes/install_app/BaseSystem.chunklist /Volumes/OS\ X\ Base\ System/BaseSystem.chunklist
    cp -rp /Volumes/install_app/BaseSystem.dmg /Volumes/OS\ X\ Base\ System/BaseSystem.dmg
    
    # Unmount the installer image
    hdiutil detach /Volumes/install_app
    
    # Unmount the macOS-Sierra ISO Image
    hdiutil detach /Volumes/OS\ X\ Base\ System/
    
    # Convert the macOS-Sierra ISO Image to ISO/CD master (Optional)
    hdiutil convert /tmp/macOS-Sierra.cdr.dmg -format UDTO -o /tmp/macOS-Sierra.iso
    
    # Rename the macOS-Sierra ISO Image and move it to the desktop
    mv /tmp/macOS-Sierra.iso.cdr ~/Desktop/macOS-Sierra.iso

    or run

    curl https://www.nickmcummins.com/make-macos-sierra-iso.sh > /tmp/make-macos-sierra-iso.sh

    and then execute it by running sudo chmod +x /tmp/make-macos-sierra-iso.sh && /tmp/make-make-macos-sierra-iso.sh. Once completed, you should see a file named macOS-Sierra.iso on your desktop.

  6. Now boot up VMware Player and create a new virtual machine using the File dialog. Using the iso disk image we just created, and with macOS 10.12 selected as the guest os, finish the setup for your new image.
    Guest Operating System - Select macOS 10 12
  7. You’ll need to erase the virtual hard disk medium as seen in the following screenshots. DiskUtility - VMware Virtual STA hHard Drive
    DiskUtility - Erase Hard Drive confirmation
  8. Now you will be able to proceed with the installation. Once completed, you should be all ready to enjoy your new macOS Sierra vm!
    Installation macOS Sierra
    macOS Sierra Screenshot

This basically involves two steps:

  1. Client-side support, aka adding the required decoding libraries on the local computer. See official documentation: Enabling the H.264 codec on the NoMachine client host. Here is an example of following the steps on my Macbook Air:
    
    brew update
    brew install ffmpeg && brew upgrade ffmpeg
    cd /usr/local/Cellar/ffmpeg/3.0.2/lib
    sudo cp libavcodec.dylib /Applications/NoMachine/Contents/Frameworks/lib
    sudo cp libavutil.dylib /Applications/NoMachine/Contents/Frameworks/lib
    

Setting a custom resolution to that of the guest monitor

Say you have two monitors physically connected to the server, supporting by default maximum resolutions of 1440x900 and 1600x900. If you are logging in to the remote server from a machine that has a larger display, it may be difficult to add the new resolution. I have attempted to follow dozens of similar instructions I found online, with little luck. The only thing that worked for me seems like a hack, but it works.

➜  xrandr  | grep -i primary 
DVI-D-0 connected primary 1440x900+0+0 (normal left inverted right x axis y axis) 410mm x 257mm

We’ll be using the scale option of randr to change our resolution in this case, i.e. (x resolution)(x scale factor) = (desired x resolution); (y resolution)(y scale factor) = (desired y resolution). You’ll want to use at least a few decimal places for non-truncating decimal numbers unless your scaling factor is a rational number:

xrandr --output DVI-D-0 --scale 1.3333333x1.33333333

Afterwards, you should see this represented if you run the initial xrandr command above.

➜ xrandr  | grep -i primary 
DVI-D-0 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 410mm x 257mm

There are a few multi-protocol chat clients — some common ones include Apple’s official Messages app and Adium for OS X, as well as the popular cross-platform Pidgin. I have opted out of using these multi-protocol chat clients for the most part: chat protocols often become outdated and re-implemented, and usually official dedicated clients that are far superior. Furthermore, many chat services have migrated to having a web-based interface, such as Skype (amidst many others). Many users now just open their chat clients as a separate tab in their web browser.

All-in-One Messenger is a Chrome app that essentially does the tabbed browser approach — it a tabbified, multi-protocol chat client, that behind the scenes more or less interfaces with the web clients available for the number chat services. However, it provides an intuitive interface that is streamlined for switching between chat protocol tabs in a way that is not provided by the tabbed browser view nor through having each of the individual apps running separately.

All-in-One Messenger Screenshot

This took me a while to get down — given the complexity introduced here in the number of possible locations for things to be configured at a user and global level — but I have been able to create desktop directory entries and have them appear in whiskermenu properly. I highly recommend not to use a tool sure as alacarte or xame, as they may introduce more complexity and complicate your configuration files to the point that they are impossible to edit and produce any results in your menu.

Whiskermenu with Application Directories Screenshot

➜  ls /home/nick/.local/share/desktop-directories 
alacarte-made-1.directory  chrome-apps.directory       gps-apps.directory
alacarte-made.directory    development-apps.directory  settings-apps.directory
chat-apps.directory        game-apps.directory

Here’s the contents of game-apps.directory as an example to be followed for all the category files you create:

[Desktop Entry]
Comment=
Type=Directory
Name=Games
Icon=/home/nick/Pictures/icons/IconScanner/png/GameCenter.png

My .menu files are stored in a subdirectory called applications-merged because of the fact that I used various GUI tools to create my entries. Placing your .menu files in the parent menus directory should suffice.

➜  ls /home/nick/.config/menus/applications-merged 
chat-apps.menu         game-apps.menu  theplatform-apps.menu  xdg-desktop-menu-dummy.menu
development-apps.menu  gps-apps.menu   user-chrome-apps.menu

The freedesktop .menu file looks as follows, for our games category example:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
    "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
    <Name>Applications</Name>
<Menu>
    <Name>game-apps</Name>
    <Directory>game-apps.directory</Directory>
    <Include>
        <Filename>American Truck Simulator.desktop</Filename>
        <Filename>steam.desktop</Filename>
        <Filename>m64py.desktop</Filename>
        <Filename>desmume.desktop</Filename>
        <Filename>dolphin-emu.desktop</Filename>
        <Filename>PPSSPP.desktop</Filename>
        <Filename>chrome-ikffjkehicicbeijfeneenheeijonfjc-Default.desktop</Filename>
        <Filename>flightgear.desktop</Filename>
    </Include>
</Menu>
</Menu>

These *.desktop files must exist in an applications directory:

➜  ls /usr/share/applications | grep steam 
steam.desktop

and the contents of one should look something like

[Desktop Entry]
Name=Steam
Comment=Application for managing and playing games on Steam
Exec=/usr/bin/steam %U
Icon=steam
Terminal=false
Type=Application
Categories=Network;FileTransfer;Game;
MimeType=x-scheme-handler/steam;
Exec=steam steam://open/friends

Finally, you will need to add an entry to a .menu file similar to the following. My full menu file’s path is /home/nick/.config/menus/xfce-applications.menu since I am using XFCE as my desktop environment:

<Menu>
		<Name>game-apps</Name>
		<Directory>game-apps.directory</Directory>
		<Layout>
			<Merge type="menus"/>
			<Filename>American Truck Simulator.desktop</Filename>
			<Filename>steam.desktop</Filename>
			<Separator/>
			<Filename>dolphin-emu.desktop</Filename>
			<Filename>desmume.desktop</Filename>
			<Filename>m64py.desktop</Filename>
			<Filename>PPSSPP.desktop</Filename>
			<Separator/>
			<Filename>flightgear.desktop</Filename>
			<Separator/>
			<Filename>chrome-ikffjkehicicbeijfeneenheeijonfjc-Default.desktop</Filename>
			<Merge type="files"/>
		</Layout>
	</Menu>
	<Layout>
		<Merge type="menus"/>
		<Menuname>game-apps</Menuname>
	</Layout>
</Menu>

Marble is a Virtual Globe app that started as part of the KDE desktop environment that is now currently available for Linux (all flavors), Mac OS X, Windows, and Android. It has tons of features and definitely worth checking out for map and geography lovers out there!

Below we view the globe using a historical map from 1689 centered around North America. Interestly, California is depicted as an island, and the Pacific Northwest region of the United States and Canada, as well as Alaska and eastern Russia, is a big void in the map (not depicted).
Marble Virtual Globe Screenshot - Historical North America Map 1689