Several months ago, I looked at a common hardware component used by bitcoin miners and the thought occurred to me: this might be useful for creating additional seats. So I went to eBay and purchased one, tested it, and uploaded a short video:
The long story short is, it works fantastic. I have a motherboard with only two PCI-Express 16x graphics slots on it, so that's my theoretical limit for seats: 2. But because I also have a single 1x PCI-E slot I can take advantage of that and use the riser to plug in an additional third 16x card, giving me a third seat.
My thoughts are that if at all, this setup would primarily be useful for anybody who has a motherboard with only one single 16x slot on it. That would negate buying a whole new computer or even another motherboard if you are against such a thing. Just add in another 16x slot using a 1x slot. Just be warned, this setup cannot be used for high end gaming on the second slot. One single PCI-Express lane has more than enough bandwidth for day to day desktop or internet usage, but it would be bandwidth starved with a large real-time 3d workload. All gaming would have to be in connection with whatever video card is in the first slot.
For a second demonstration video, I used BZFlag to quickly highlight the possibility of using multiple seats for gaming. At the end of the video, I return the computer settings back to single user dual-head.
For the purposes of EasySeats, the only benchmark that matters is: "how easy is it to set up?" I also wanted to place emphasis on the fact that it is not required for multiple users to be stuck using the same desktop.
I recently created a simple but fairly long video and uploaded it to a channel on YouTube, to demonstrate in real time a single-user dual-head system which is then split into multiseat, and then brought back to single-user again. I also demonstrated the simultaneous use of KDE, LXDE, and XFCE. I hope this video helps to demonstrate the ease which multiseat can be put into production use.
The fourth installment of EasySeats has been uploaded to github. It will determine the version of systemd in use, and either search for the text file or if it finds a new enough version of systemd, it will get device addresses direct from loginctl.
So I finally got around to uploading the third version of EasySeats. This version has updates primarily around the drop down menu on the second tab, which makes it possible to quickly assign up to five seats.
If you attempt to issue the command loginctl seat-status seat0 with a version of systemd prior to 236, you cannot get full address information except from a maximized terminal window. It makes sense why this was missed, the systemd-devel mailing list release notice for v236 didn't exactly spell it out in the plainest language. Actually, it looks to me like it wasn't announced at all.
This bug fix, which I look at as a new feature for systemd, has large implications to someone such as myself who is developing a GUI to streamline multi-seat creation. It also has large implications for anybody who doesn't want to deal with the command line - for any reason. Using either Python or Java (and I presume other languages as well) the address information that is output by loginctl has ellipses inserted into the center of the addresses making it impossible to programmatically derive the data in a simple way.
Thankfully, Lennart Poettering quickly resolved the issue. Less than a month after I reported the ellipsis bug in loginctl, it was resolved and staged for milestone v236.
As for the GUI program I built for creating multi-seats at the click of a button, EasySeats is currently written in Java and the source code is available for download on GitHub for anybody who is looking for an easier way. It is currently at version .02, which directly derives data from loginctl and back to final seat creation. Version .01 works with the aid of a text file, for those who have an older version of systemd.
I added a new .jar file to the Github releases repository, which changes EasySeats to work directly with systemd instead of relying upon a text file to read the address information.
Not much else to say about it really.
Based on the distros I have installed and conducted some testing on, the easiest distros are Linux Mint and Manjaro. Presumably, any distro which uses LightDM should work out of the box but I will admit that I did not try every single Linux distro out there. I also had a lot of success using most distros if I picked the MATE version as the starting point, such as Fedora.
Additionally, while I did not try starting out with a Gnome 3 based distro and replace GDM3 with LightDM, I did try starting out with a KDE-based distro and switch to LightDM and it did work at creating multiple seats. This was on OpenSUSE using YaST.
The display manager is one of the most important pieces in this process, which means that LightDM and MATE's GDM2 are your best bet for a place to start. This will allow you to see the software in action and test out your hardware, so that you can confirm that you don't have any incompatibilities preventing you from establishing your own multi-seat computer.
(For reference, as of this writing the versions were Linux Mint 18.x Cinnamon and Mate, Manjaro XFCE 17.xx, OpenSuse 42.3, and Fedora 26/27. )
For this release, all you have to do is run the jar file and set up your seats! A separate repository has been set up at github.com/ezst036/EasySeats-releases in order to make it as easy as download-and-go.
Here is what the program currently looks like:
Eventually, this whole UI will probably be replaced with something better. But for now it's built around a straight forward paradigm. The use steps are:
Last week I uploaded the first iteration of EasySeats, an open source program written to eliminate the need of using the command line to enable and configure multi-seat setting on Linux based computers. If you are experienced with Linux but have never attempted to enable multi-seat on your computer before, just know that it may not work out of the box. If you are new to multi-seat, great!
Below, I will go over some technical information that users may need but first, where is the code? The code has been uploaded to my Github repository here: github.com/ezst036/EasySeats-Java
During my initial testing, I have used this software on a two-slot motherboard with two older generation Radeon cards (using the r600 driver) without putting in any codes on the command line. I am looking for feedback, and I do have ideas for more features I am going to build in as I go forward, but know, that in most instances if you run into an issue you probably will not need to put a bug report in with me. For example, the SDDM display manager does not currently support multi-seat, it is a work in progress. I do strongly suggest that you become active in putting in bug reports.
How to use EasySeats:
Most importantly, EasySeats is Java based. I recommend getting Java directly from Oracle before attempting to run it. When I ran EasySeats for its final test before release, I put it into its own Jar file and ran it from the desktop. I would like to make a c++ version of EasySeats, but for now that is for the future.
EasySeats is currently built to take advantage of systemd's loginctl functionality, meaning that if you do not have a Linux distribution which has systemd, EasySeats is not functional.
Moreover, and this is critically important, EasySeats currently relies upon a text file to properly function. You read that right! When it was first built, loginctl did not properly handle the ellipsis functionality of systemd in the context of getting device addresses. This means that I could not initially get device addresses out of loginctl programmatically. I say initially, because I already submitted a bug report, that bug report is supposed to be fixed and a part of systemd 236. I have not tested it yet. In a future release, I will make systemd functionality default and txt file functionality secondary. Once you have created the txt file, issue the command loginctl seat-status seat0 and copy the contents into the text file.
As to where said text file should be placed, it should be in the root directory of your user. For me, the file is in /home/user/seatstatus.txt. Original, right! Yes, well, I did most of this work on a test computer so that I could re-install at any time without worry of losing anything important. That, and my main computer does not have two pci express slots. So there's that.
After launching EasySeats, assigning seats is as easy as click, click, assign. Then reboot. That's it! Easy! In most instances, seat assignment behind the scenes is not done in real-time by the operating system, not from what I have seen.
When you first launch EasySeats, notice that it is multi-tabbed. However, the program will not do much until you get your system devices. This will populate all of the addresses into the program and make it work. The functionality of the second tab is enabled when you click the get devices button. I have tested the get devices button with systemd, but until I test it with systemd 236 that functionality is not enabled. For now, all of these devices get pulled from the text file.
On the second tab, you will notice that all the devices are listed on the left hand side. The add and remove button allow you to add additional devices to additional seats, such as USB devices, represented by the jlist on the right hand side. With systemd, seat creation does not work unless you begin with a video card.
A video card is all that is necessary for the creation of a second seat. That's it. It is my recommendation that for testing purposes, you should add your second video card to seat 1 and then reboot. If it works, you will be greeted with two login screens. Any USB devices can be added in real-time without the need for a reboot. Within EasySeats, video cards will be represented by the address drm/card0, drm/card1, etc.
I would like to stress, that I have only tested this out with a two user setup. If you have a motherboard with three slots, I would encourage you to do some testing with a spare main drive first. I expect that nothing at all will happen, but its your data.
Finally, once you have added all of your devices to the secondary window, the "Assign" button is what ships out the command to enable your seat. When you do this, keep in mind that each device is handled individually. So if you assign 5 devices to your second seat, expect to put in your root password 5 times. This is annoying, yes, but it is actually a great thing because in each instance you know for certain that your device was accepted. To put it another way, the operating system is acknowledging that "this is going to work" in each instance.
So, I think that about covers it. I will have future information for all of you multi-seaters out there and I hope that I can be of assistance in some instances. I will, from time to time, create bug reports where necessary(such as I did with systemd) in the hope that it will further streamline life for those of us who would like for more than one person to be able to use the computer at the same time. I hope to hear from all of you!
EasySeats is open source software developed to bring ease to users who choose to go multi-seat. It supports video cards for seat creation as well as external USB docks.