Hacker News new | past | comments | ask | show | jobs | submit login
Universal Split Screen (universalsplitscreen.github.io)
486 points by surround 32 days ago | hide | past | favorite | 61 comments



Back when I was poor and all I had was a laptop... my girlfriend wanted a computer but we didn't have enough money. So I loaded up virtual box and plugged in an external monitor, keyboard and mouse binding them to the virtual machine. This setup worked really well to let us both browse the internet simultaneously.


I seem to recall Ubuntu had a similar thing for PCs to drive multiple X sessions (a classroom's worth?) off a single PC: https://help.ubuntu.com/community/MultiseatX

But it seems to have gone by the wayside as the upper limit is really the number of video outputs, and driving 30+ displays off one computer starts getting into custom setups that are going to be more expensive, even if the goal was just running 30 instances of Firefox on one computer. The wiki hasn't been updated in 6 years, so I assume it's not viable in modern Ubuntu?


It's not done often, as not many people must run 30 individual desktop sessions on a single server box at the end of the day.

Procedures are more or less same for every Unix or GNU/Linux systems. You somehow get dozens of display outputs, give Xorg with necessary config as to where to output and what input to watch, and run it. Unix and Linux are a multi-user operating systems so there's no inherent problem with it. Windows can do the same using the feature called Terminal Service. macOS Server had the same kind of feature years ago.

On GNU/Linux, DisplayLink(not to be confused with DisplayPort) USB graphics adapters should work for this, or virtual framebuffers using Xvfb can be used to connect over VNC or RDP. Or some sort of PCIe hub can be used to connect grapevine full of Quadros. Whatever.

The practicality problem of it is user experience tends to be rather suboptimal due to collectively massive issues, from network overheads, hardware acceleration issues or lack of support for it, workloads of sysadmin to constantly fighting outages, cost of client console hardware that aren't supposed to be full standalone computers but virtually it, etc.


The big issue with doing that sort of thing these days is that for the price of the specialized hardware you'd need, you can just buy mass-produced general-purpose computers.


Hardware was what kept me from donning my Olde Guy hat and going on about how we used to have 20 serial terminals attached to a DigiBoard and a single System V machine, and by golly, we were glad to have it. It then occurred to me, "where am I going to find serial terminal hardware these days, and will it cost more than a WalMart laptop?"


I did this on Gentoo around 10 years ago. It was quite cumbersome, but it worked. Separate X sessions in time of xorg.conf. The problem was with sound, I didn't know how to divide it, also removable media and danger of shutting down computer when another session was still running. Today it would be probably easier.


Not sure about Ubuntu's support for it, but they may have just decided to leave it for virtualization OSs specifically made for this purpose.

https://www.youtube.com/watch?v=LXOaCkbt4lI


My class had that, but we were using remote session with dumb terminals, each terminal was wiped with the latest image at every boot.


That's a brilliant idea! I was mentally practicing sharing my 32 inch screen with my wife when she complains about screen real estate inequality in the house - hers is surface pro - but never come close to solving keyboard and mouse sharing.


That's a nice idea for someone with a big family, perfect usage for multi-core cpu too.


Linus has done a few of these, but with his $30000 budget, it's probably simpler to buy normal PCs: https://www.youtube.com/watch?v=LXOaCkbt4lI


Thanks :). I was thinking of a configuration that would allow web surfing / school work etc. Should be quite cheap.


wow, this reminds me of my earlier days (also poor) but I did it with an ancient 30gbp Nvidia card that had a TV output and put another X session on that display output.

It surprises me that it works so well, but I think that the original technology was designed exactly for this.


I'm glad it worked for you in a personal setting. I know having VMs with thin clients is pretty common in office settings and schools, but I'm guessing they have dedicated hard- and software for it (Citrix I believe? It's been a while)


Great idea. In the past I played with the idea of using netboot sever from my laptop. But this idea is better.


Couldn't you have used a new user-account on the same computer, instead of using VirtualBox?


Without VirtualBox, all input and output devices are bound to the currently logged-in user (you can't tell Windows that another user should log in but their input/output come/go only to those devices).


> let us both browse the internet simultaneously

It sounds like the idea was to use it at the same time.


Well, my Linux system allows two users to use the computer at the same time.


On one computer, with two mice and two keyboards and two monitors?

That's what we're talking about here.


Timesharing was introduced in the early 60's and still supported by Unix-based systems. Windows has similar functionality but probably needs some addons. Virtualbox is one way around that.

https://en.wikipedia.org/wiki/Compatible_Time-Sharing_System


Yep. The thing to look for is multiseat-X. See https://help.ubuntu.com/community/MultiseatX


Apparently there is another, similar application called NucleusCoop. Here’s a good comparison of the two:

https://www.reddit.com/r/localmultiplayergames/comments/ce8m...

Both are free and open source.

NucleusCoop: https://github.com/lucasassislar/nucleuscoop/

Universal Split Screen: https://github.com/UniversalSplitScreen/UniversalSplitScreen


It always makes me so happy when I see multiple F/OSS solutions to a problem :)


Neat idea. That would be super easy to implement on GNU/Linux using nested Wayland compositors, which BTW is something Valve is already playing with (although for different reasons): https://github.com/Plagman/gamescope


Why nest them? Wayland already has multi-seat.


With nesting, you get full flexibility of how to display a single game (cropped, letterboxed, scaled, placing on the screen even if it insists on being fullscreen, input grabbing etc.) so you can play split-screen without having to switch your regular session to a special-purpose compositor.


I'm a bit curious if this could be bent into being a pair-programming tool. One of the core functions is simply routing multiple connected keyboards/mice to multiple concurrent copies of a given piece of software.


I like that idea. In the past I was thinking that multiple separate cursors and keyboard inputs on a shared screen would be neat, but the problem with the way I was imagining things was in how do you make it so that both people can work together unhindered at all times.

For example, in the way I was originally imagining it, you and me would sit down at a computer and I’d open the editor and we’d make concurrent edits. But then when I want to scroll, the suddenly you would not be able to scroll. And another example, if you were pointing and clicking at something, say for example that you were drawing a painting in Photoshop, and I try to move another window from one side of the screen to the other and suddenly I am occluding your window, and on top of that you might click in my window.

This was a few years ago so I was imagining a situation where both people were sharing the same computer and sitting together physically in front of it.

But I like what you said a lot. A split screen view with separate working areas that we both see, like in a video game, that would probably be nice. Both for local and remote collaboration.


There's an emacs plugin for it[0]. I've used it before, though only at the same network, and not over the internet. The host gives access to specific files, which people connecting to the session can then edit. Host and clients maintain separate buffers, selection, etc, which are then synchronized by rudel.

If you are on a shared account, it is even easier by running `(start-server)` and then connecting to it with emacsclient. The only downside is that marked regions are shared between clients.

[0] https://www.emacswiki.org/emacs/Rudel


How do you see this being used in pair programming? To me, the key is to work on the same thing, one person being the navigator (“where to go”), and the other being the driver (“handling the pedals and the steering”). In this mode, there is only one keyboard and one thing to look at. Why would you want a split screen?


Same Idea here. Always was annoyed with the lack of multiple cursors from mice/keayboards when doing pair programming.


My 5yo daughter has been really into creative mode minecraft lately (using my computer and copy). She's been begging me to get a second computer set up to play together but I haven't had the time or resources to do so. I'm definitely checking this out!


FWIW my four year old has started exploring minecraft on a raspberry pi 4. It runs decently, and the pi is pretty cheap.


Is that the pi edition or full version? I have a 4 waiting for me to use. Once my daughter saw a video of someone playing with dragons in minecraft, she started asking why ours didn't have them... so now we have mods for unicorns, dragons, dinosaurs, and rocket ships. We just went to space yesterday for the first time, and she started building a house on a moon.


It's the pi edition.


I want a 64-core 51GB box with this to use wih my teams. Anyones IDE will fly using that power available. Costs could be lower too (although I doubt setup and maintenance offsets the decreased hardware cost).


I posted this the other day https://news.ycombinator.com/item?id=24571689

Basically, along the same vein. I have multiple offices at my house, it would be nice to just have one POWER-horse, that I can use throughout my home when working. Instead of have to use slower-laptops occassionally. I don't understand why this hasn't been solved as a problem before.


> I don't understand why this hasn't been solved as a problem before.

Aren't you basically describing mainframes?


I think it is kind of solved, Windows for example support remote connections via remote desktop. With the desktop version you can either run local or remote session. If you run server versions you can have multiple simultaneous connections. The same things are of course available on Linux side as well

I'm doing this with Windows all the time, connecting from laptop my desktop where I have all the apps running. It's pretty usable even with 4G connections.


You can do this today. Enable rdc on your windows machine

https://www.howtogeek.com/howto/windows-vista/turn-on-remote...

you can portforward or setup a vpn to make it accessible anywhere in the world.

There are rdc clients for nearly every device out there (android, iphone\pad, raspberrypi, window, mac, etc)


RDP or VNC over Ethernet is still laggy. Same reasons as why cloud gaming never takes off.

There are people running super long active HDMI or USB extension cables so perhaps that kind of setup paired with HDMI splitters could work. Security is going to be an issue though.


I think that's called docker or kubernetes these days?


I am assuming this runs two separate instances of the game in some isolation/VM-like separation. Pretty cool project!


After looking at some of the setup guides for some of the games it doesn't look like it is using any fancy isolation tricks. So far it looks like it works with games that either allow the user to run multiple instances or the program somehow modifies the game to allow it to run a separate instance. Although I don't know what is being changed that allows the games to run multiple instances.

Here is an example of the program modifying Left 4 Dead 2 so that it can run a separate instance. https://youtu.be/1RHWgHh2Q6M?t=120


Some Steam games require little to no modification, just a direct invocation of the game's launcher.

Others require a Steam API emulator: https://universalsplitscreen.github.io/docs/goldberg/

> Some games use Steam to prevent you from launching multiple instances, and some games use Steam for matchmaking, preventing you playing with one copy.

> The Goldberg emulator replaces the Steam API dll, tricking games into letting you launch multiple instances and join the same server.

There are also a few warnings on the site that the hooks used by universal split screen will likely trip anticheat software.


> There are also a few warnings on the site that the hooks used by universal split screen will likely trip anticheat software.

Yikes, they should make that warning more prominent. Like a big yellow banner across the top of the landing page.

If you trip VAC for example, you're banned from online play for all of your VAC-enabled Steam games, IIRC. I imagine programs like this that do all sorts of weird Windows API plumbing/injection are pretty likely to look anomalous to even the most basic anti-cheat.


No, you're only banned from playing the game that VAC detected a cheat in, unless it's a half-life or source based game where it bans you from related games using the same engine. http://www.vacbanned.com/static/information

Vac is also only triggered if you try to sign into VAC-secured servers and VAC detects a cheat. In the unlikely event that something like this is ever classified as a cheat (unlikely since valve manually detects and adds cheats to the blacklist), simply running a local server would not trigger a VAC ban.



In a nutshell, how does VAC work?


You can always run a game in multiple instances by launching the secondary copy using another user's credentials.


This is one of those brilliant things that seems obvious in retrospect. Sweet hack!

See also: https://github.com/symless/synergy-core (share one mouse/kb across multiple computers with their own displays via network)


Fantastic, can you put up some videos showing it from launch until multi-player ?


Im not the creator but there are videos on the website under “Tested games guides.”


Looking at some of the setup guide videos, I guess portrait mode for the monitor would work better as two landscape game windows would fit better on it.


Ergonomics would be a bit weird considering that you're likely to be sitting side-by-side.


I gotta admit, this looks very impressive. I took a look at the borderlands 2 example video and it seemed very flawless.


There’s a better one called NucleusCoop


Awesome I was just looking for something like this, as a lot of games only have online multiplayer.


This is real social gaming..


Very cool.




Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: