Windows 10 has the ability to run a Linux subsystem. However, you can now run Arch Linux instead of the default Debian thanks to some great work by “turbo” at github.com. Here’s the skinny on getting this setup.
For a long time now I’ve been wanting to build my ideal computer. A powerful Linux machine with surrounding monitors. Recently I had the opportunity to do so. The following is a time lapse video of the entire build as well as the configuration files and list of components and where to buy them. This way, if anyone else wants to construct either the same or something along the same lines, they’ll have some footsteps to follow if they need the help.
During the trial and error process there were little milestones along the way.
Finally I got everything working correctly and the Hydra came to life.
The following is a list of all the components used in this build along with links to purchase.
I went with Dual Nvidia Quadro K620 video cards because they were very inexpensive and had the ability to display up to 4 monitors per video card via daisy chain through DisplayPort 1.2. The monitors that I found that were pretty inexpensive however didn’t support direct daisy chaining so I had to purchase 2 multi monitor display adapters which essentially did the daisy chaining. Physically, this is the setup.
DisplayPort Splitter 1
DisplayPort Splitter 2
My chosen distribution for this build was Arch Linux, yours maybe different however, the Xorg configuration should be similar if not identical if you’re using the same components. If not, then perhaps this might just help you along the way.
My first setup was using the nvidia proprietary driver, installed by the following:
user@computer:$ yaourt nvidia-beta-all
This driver set didn’t have Base Mosaic nor Xinerama working. Everytime it was turned on the screen would black out and I would have to hard reset the machine and manually remove the settings.
Visually what I was setting up as 2 screens, one for the first GPU and another for the second. The use of nvidia-settings made this very painless, I suggest you use it as well if you’re using Nvidia cards.
user@computer:$ sudo pacman -S nvidia-settings
user@computer:$ sudo nvidia-settings
Once you save the changes to the Xorg.conf file, you should be able to see the file located at /etc/X11/xorg.conf.
Here’s a visual representation of my screen Xorg setup.
Hopefully this helps in understanding what I was trying to achieve. This gave great results and allowed me to get all monitors working however, there were two issues with this setup.
The first, getting a graphical environment to support eight monitors was a bit troublesome at first. I started off using Gnome 3, tried KDE, etc. yet none of them supported anything other than a dual monitor setup. Also, xrandr did nothing to help here and even reported that the second GPU wasn’t available which was absolutely not the case. The solution here was to install a different desktop which supported multiple monitors. I went with XFCE4.
The second, windows could only be moved in the screen in which the window was created. In other words, a window created in Screen0 could only move through monitors 1-4. This became more of a problem over time and was resolved later. Here’s my first working Xorg.conf file.
The above configuration eventually became a bit problematic and reached out to NVidia to find out if there was anything that could be done to get Base Mosaic and Xinerama working in their driver. The response I received was to try using the following driver:
This turned out be very helpful. Once the driver was installed I once again turned on Base Mosaic and to my surprise the entire panel of screens were being utilized under a single Screen0 entry. This made it possible to drag windows from Monitor 1 all the way across to Monitor 8.
This final Xorg.conf file is what I decided to keep and use going forward.
I hope this helps anyone who gets stuck trying to get multiple monitors working under Linux using Nvidia video cards. Please feel free to drop me a line if you get stuck and I’ll see what I can do to help.
Under the Graboid directory you’ll notice two files, the first is the graboid.png file which you can copy to your shared icons directory (on Arch Linux this is /usr/share/pixmaps). The second is a simple bash script which you can use to launch Graboid from the command line. Feel free to modify this file until your heart’s content. Also, if for some reason you can’t execute the graboid file, be sure to change the permissions of the file.
user@computer:$ chmod +x graboid
Lastely, run Graboid.
I hope this helps you get up and running with Graboid on Linux. Enjoy!
I’ve been using the Windows 10 BASH shell for quite a while now forcing myself to get used to it. Along the way I’ve figured out a few working arounds for features such as sshfs and simple copy paste commands. First, the copy paste. When I first started using the Windows BASH shell I found it very frustrating when trying the copy and paste using the CTRL-C and CTRL-V commands. As any Linux user will tell you, these are kill commands and it doesn’t really make sense to use them. However, I did find another set of commands which work much better, here they are.
COPY: Select text, hit ENTER.
PASTE: Right click
So much easier than trying to fiddle with CTRL commands which are sometimes working and sometimes not.
Now let’s talk about sshfs, at the time of this writing FUSE support was not part of the Windows 10 BASH shell. There is/was however a petition to get it introduced, if it’s still not included and you would like to help, vote it up using the link below.
So, how did I get something similar to sshfs working, simple I put together a couple of shell scripts that utilize rsync and here’s the gist. Basically what we want is a way to pull all the files we want to modify locally, use an editor to modify files and when the files are modified, push them back up to the server. To do this, I created 3 BASH shell scripts named “pull”, “push” and “watcher”. First the pull script, this script performs an incremental rsync pulling the remote files locally into a directory of your choosing. The “pull” file looks like this:
The above requires that you pass change the “user@someserver” to your actual username and server name. Also, the “/path/to/remote/directory” and “/path/to/local/directory” need to be changed to your specific files. For my specific needs, I used something similar to the following:
The above file continually attempts to do an incremental rsync push until you kill it (Ctrl-C). After you’ve customized the above files to your liking, all you need to do is execute a pull then execute the watcher, and you’ll have yourself a poor man’s sshfs.
As an optimization approach, you can also add –exclude directives to the “pull” file which will ignore files and directories, for example:
I needed a way to get inside my work firewall from home. There was a DMZ linux machine that I could SSH to, but no VPN available. What I really needed was a way to configure the router/firewall, but the only way to do that was to be on the internal network and browse to it using a browser. Trying text based browsers didn’t work, the only way to access and administer the router was to use a full featured browser from behind the firewall itself. To make a long story short, I figured out how to do it using Putty and Firefox, and this is how you do it.
First things first, make sure you have Putty and Firefox installed. Next you’ll want to be able to establish an SSH connection to a remote server using Putty. For example, launch putty, enter the host name or IP and make sure you can connect and login. Once you have that, you’re ready to setup the SSH tunnel and browse through it.
Configuring The SSH Tunnel
Now open Putty and Enter the hostname or IP of the machine you want to establish a remote connection to. Next under Connection->SSH->Tunnels find the radio boxes under the Destination field and make sure Dynamic is selected. Next under where it reads Add new forwarded port: enter a source port. For this example lets use 1024, enter this in the source port field and click the Add button. You should see a value in the Forworded ports: list that reads D1024. That’s all there is to the Putty side of things. Next go back to the session area and save the current configuration as a saved session if you’d like, then Open the SSH connection.
Now, launch Firefox, select Tools->Options and click the Advanced tab. Within the Advanced tab, click on the Network tab and click the Settings button.
Within the Network Settings dialog, select the Manual proxy configuration radio button and enter the following for the SOCKS Host: and Port:
SOCKS Host: localhost
SOCKS Port: 1024
Click OK on the Settings dialog, then Click OK on the Options dialog. Now you should be good to go. Enter a new URL in the Firefox address bar and you’ll be browsing from the remote end of the SSH connection.
So here’s the scenario, let’s say for the sake of argument that you have a CentOS linux box running with a single NIC, but you want to have 2 IP addresses assigned to this box (for whatever reason). The following is a step by step guide that will walk you through the process of setting that up.
First, you’ll need to determine the interface name of the network device being used. For instance, if you’re running a wired ethernet card with a single port, the name is more than likely going to be eth0, if you’re using a wireless card it might be something like wlan0. First thing you want to do is determine the interface name of this device. An easy way to do this is to run the following command:
You should see something similar to the following:
In this scenario, eth0 is the network interface name and lo is the loopback name. Now that we know eth0 is the one we want we’ll need to create a virtual device for it (aka. alias).
Create An Network Interface Alias
First, let’s change directory to the network-scripts folder.
user@computer:$ cd /etc/sysconfig/network-scripts/
Next, we’ll copy the ifcfg-<interface_name> to the alias name.
user@computer:$ cp ifcfg-eth0 ifcfg-eth0:0
In this example we are creating a single alias :0 however, you may create as many as you like. Simply continue to copy the ifcfg-<interface_name> to the desired alias name (ie. ifcfg-eth0:1, ifcfg-eth0:2, etc).
Configure The Alias
Lastly, we need to configure the alias. This is the step where you physically configure the interface to be static or use DHCP and set the routing information.
For arguments sake let’s configure it to be static. Open the ifcfg-<interface_name> in the editor of your choice (ie. vi ifcfg-eth0) and set the following.