After reviewing an issue raised on Github by a user, I pushed changes to the code base that remove the validation around the version of systemd.
This is important, because if you are using an older Linux distro which does not have systemd 236 or greater, EasySeats will not work for you. Older versions of EasySeats are still available if they are needed, but they are not supported versions.
Get the latest version of EasySeats here: https://github.com/ezst036/EasySeats-releases
After a much longer amount of time than I had anticipated, The next release of EasySeats is available. This is a very nice update and when I compared how version 7 works, and I am very happy with the current functionality.
For this release, large parts of the program have been re-written. There have been significant code re-factors and more efficient code reuse which all work to make the program more dynamic when syncing with loginctl. Second and third and more seats are automatically recognized now, and there is additional logging and error handling. The functionality for reading from a text file instead of directly from terminal has been removed. If you need the ability to read a text file instead of reading directly from the terminal for an older distro, version 7 is the last to have this capability.
With the more dynamic nature of this release, EasySeats now keeps a copy of the seats and their status in a series of arrays. During testing I tried moving, removing, adding, and more, devices to various seats back and forth and it always worked for me. The one way to produce an error is to assign a seat and then press "cancel" when the root password dialog comes up. EasySeats assumes that when you move mouse number 2 to seat number 2, that you intend to do this after you press the assign button. When the root password dialog comes up, the seat number assignment has already been made in the status arrays.
To restore, clear all status and re-get the seats. To download, the jar file has been uploaded to the releases folder:
One of the big reasons that this release was delayed so long was a bug that I ran into that I could not figure out. My suspicion is that there is a Java versioning issue. In one of my methods there is a counter variable that is set to 1 instead of zero. I'm still not sure with 100% certainty, but in order to get this working on multiple distros I put a check in the method that looks at the Java version. If the Java version is older than 1.9, the counter is incremented. If not, it stays at zero.
I have several distros that I develop and test on, and in this instance the older version of Fedora I have and the newer version of Ubuntu require different handling for the increment. Hopefully this can be ironed out in the next version. I will most likely be upgrading several of my computers soon to newer distros, which I think will help bring the issue to its conclusion.
For future testing purposes, I think this version could be very useful. There is additional logging available by launching EasySeats via the terminal instead of double clicking the jar file.
The seventh release of EasySeats is now out, and with it come an abundance of new features.
Of these, the most notable item is that there are no limits to the amount of seats now. With this change, the drop
down list now generally works in a LIFO context when removing seats. The goal is to eliminate the requirement to clear all seats to start over in case there is a use case of 3 or more seats.
For the most part, program functionality is similar to how it was before with the left <---> right paradigm. Pick a seat number, add devices from the left side to the right side, and when you are ready you can then assign them to the seat with your chosen configuration. The permissions pop-up is the point when your seat will actually be created.
A note for future reference: the next version will be able to automatically pull in data for additional seats, not just seat zero. This means that the capability to get systemd status out of a text file will be going away. I could technically make it work by just having one text file per seat, but that begins to defeat the purpose. It has been over a year since systemd 236 was released, which makes pulling the entries out of the terminal possible. Version 236 or newer should be in most linux distributions by now.
Adding 4 devices no longer requires typing in the root password 4 times with EasySeats.
I had a thought earlier today that it would be nice if loginctl(systemd) could accept multiple device addresses with only one attach command. In all that I have read about loginctl, I have never seen anybody do it this way before. To be clear what I mean is this. To add multiple devices, I had always assumed that this was necessary:
loginctl attach seat1 (device)
loginctl attach seat1 (device)
loginctl attach seat1 (device)
Etc, etc. Tonight after work I attempted adding multiple devices on one line. I was happy to learn that what I was seeking is already in place. loginctl will happily work as follows:
loginctl attach seat1 (device) (device) (device) (device) (device)
The best part is, systemd is smart enough that the video card does not necessarily have to be the first device in the list. It just has to be present in the list. After rebooting, all the devices I expected were present on seat1. I tested this with 5 devices on a Solus Linux multiseated install.
One thing I do not want for EasySeats (if I can avoid it) is to have the program store the root password in any way.
EasySeats .06 is now available on GitHub in source or as an executable .jar file.
The latest update makes small changes to some messaging that appears on the terminal if the jar is opened via the command line.
The terminal command "java -jar /home/user/EasySeats.05.1.jar" will launch EasySeats. As commands are sent and given some will be displayed there. The installed version of systemd on your distro will be displayed, as will the user's home directory.
The "big" change is the loginctl command being displayed for confirmation purposes. After you select your device, click add, then click assign, in the terminal the string value "The command that was sent was: " will be followed by what loginctl needs to continue with device assignments. For example:
"The command that was sent was: loginctl attach seat1 /sys/devices/pci0000:00/0000:00:12.2/usb1/1-6"
Also, the string value "To create a seat, always remember to start with a video card." will appear in the terminal during device assignment. At its core, EasySeats should be able to facilitate the creation of seats with as little thought as possible, but at the same time it is also a good thing to facilitate the ability to learn how seats are created through simple code and useful feedback.
I recently got my hands on an HP T100 Multiseat Thin Client as it was a really good deal at less than $10. With it, I wanted to get an idea of the process for setting up multiseat with EasySeats without an additional internal video card. These thin clients work like an external display adapter that also has sound and kb/mouse connectivity options, or at least that is how this HP one is. I am sure the ones from Plugable and ThinGlobal are the same.
Below, I am going to create a multiseat setup using only the EasySeats GUI.
Right away, even before attempting to set up additional seats, I was able to use this client to set up a second head for some two-monitor action:
Next I request the list of current seats and show the display panel. After that, EasySeats is launched and I press the "Get system devices" button on tab 1 to pull in all available devices from systemd. On the second monitor, I have requested the same list of devices at the terminal just to show what a multiseat thin client looks like.(This step is unnecessary in the seat creation process) As you can see, the client is device usb:1/1-2, and for its sub devices it has a graphic component, a C-Media device, and two HID devices. The C-Media is most likely the sound and the two HID interfaces are the PS2 ports.
Next, I move to tab 2 and click on usb:1-2 and press "Add", so that this device is moved over to the second list:
Then I click "Assign". Here, an authentication window will pop up and ask for the administrator password. This is not a function of EasySeats, this is your distribution letting you know it received a valid command. Plug in your root password and your seat will be created. It's that easy.
I do want to note that in the upper middle section of the second tab, the ability to choose other seat numbers is represented by this drop down menu. So if you wanted to create up to 5 seats, you can.
Once the administrator password has been accepted, the last thing to do is close all applications/windows and reboot. Once that is complete, the next thing you will see is this:
Voila! Two seats and zero commands or text files modified in the process. The cool thing about a thin client like this is that the sound and connectivity interfaces all get transferred over to the new seat with one single click. Lastly, I log in and request the available seats:
I do not have any PS2 devices and haven't had any for years so I had to plug in the kb and mouse "normally" and use EasySeats to assign them to the second seat. USB device assignment can be done in real-time, that is, no reboot is required to move USB devices from seat to seat the way it is for a video device. It is hard to demonstrate in screenshots, but the sound does work as expected with this thin client so both seats have sound. The Toshiba laptop was released in early 2010.
This is currently running Xubuntu 18.04 with systemd 237 and lightdm. At this time, systemd and lightdm are the two most important software requirements. If you have those two, it really doesn't matter too much which distribution you install. On the hardware side, EasySeats only works when multiple graphics adapters are available.(such as a USB multiseat thin client or a second PCI-E video card)
Personally, I think I would recommend multiple video cards over a USB adapter like this just because its more performant hardware, but of course the only way to multiseat a laptop at this time is with a USB thin client adapter. During the use of this device, I did notice small graphics performance lags that would not have happened with a card. And with EasySeats, seat creation and assignment is just a click away.
To recap, the process to create one or more seats is:
1. Launch EasySeats
2. Get devices on tab 1
3. On tab 2, Choose device, press Add
4. Press assign
5. Root password
Additional insight into creating a seat with EasySeats can be seen on my YouTube page.
EasySeats Jar files(open and go) can be downloaded from Github: github.com/ezst036
On the GitHub page EasySeats has been updated. The latest version creates a small text file in the directory /etc/polkit-1/rules.d/20-prevent-shutdown.rules.
This will only work if you first give yourself access to this folder. In most instances, this folder requires either root or some other high level of permissions in order to access. EasySeats will see this permission and come back with a popup that you do not have enough privileges for this action. I chose to go this route as I believe root functions are important to keep separate away from what the program actually does. Additionally, if the file already exists you will be notified, but it will be up to you to manually delete the file if that is what you choose.
Once you give yourself permissions, what is happening are these instructions:
But who really wants to mess around with a bunch of text files or other configurations in order to set this up? Besides permissions of course. It should just work!
I recently had to call the help desk to have an issue sorted out on my corporate workstation (Windows 7) and as I was sitting there I kept thinking to myself: "Now wouldn't it be great if I could set aside my second monitor as another seat?"
Think about this. You're working on some big project or preparing for a new project that isn't properly planned or just needs to be completed quickly, and you need some new set of software or permissions for some set of workgroup and then reality sets in. This is going to require three calls to tech support over the next week.
What an unnecessary frustration. If only this one computer could be used by two people simultaneously at the same time!
So it may not be a very common occurrence but it certainly seems to happen at the absolute worst times. Help desk just has to take over your computer remotely while you sit there and watch the mouse move and talk to the person on the other line.
There are a lot of practical uses for having multi-seat capability, even if you are on a computer that you intend to be a permanently single-seat workstation. There are always those random times here and there where a second person might need access simultaneously.
Now I just wish I had a Linux workstation at work!
In the current climate of multiseat, videocards are the basic building block of each seat - that is, if you desire simplicity in multiseat. Two video cards means two seats. Three video cards, three seats. With that being said, the easy way to understand drm, or the Direct Rendering Manager, is as a kernel module which manages these video devices.
This is why in EasySeats when you assign your second or third or n video card to another seat the video card address represents as drm/card#.(insert number)
Freedesktop.org has a great write up about drm in much more detail: dri.freedesktop.org/wiki/DRM/
I don't have too much to say about this except for the fact that it works as expected, and the sound device did not require a reboot. I have a spare PCI-E Sound Blaster Audigy card that I used for this test, I would assume that a USB sound device of some kind would function the same. When I first created the second seat and logged into KDE Plasma, I was greeted with this:
After assigning my motherboard's onboard sound device to the second seat and logging in a second time, I was greeted with the following image. I plugged in my audio cable, and indeed it worked for its assigned seat. Sound on either seat was independent as expected.
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.