Set it up with PartyDeck
1
Create and sign in one profile per player
Open Cordial normally. In the header bar, open the profile menu, choose New Profile…, name it with letters, digits,
- and _ (P1, couch-left), and sign in. Repeat for each player, then close Cordial. A profile is one account’s storage, and two windows cannot share one.2
Add the handler to PartyDeck
PartyDeck reads handler folders from For the Flatpak, which runs
~/.local/share/partydeck/handlers/. Copy the one that matches how you installed Cordial from packaging/partydeck/ in this repository.For the deb, rpm and Arch packages, which put cordial in /usr/bin:flatpak run and so works for a user or a system install (read the Flatpak note under What is broken first):3
Give each PartyDeck player a profile of the same name
In PartyDeck, create a profile named exactly like each Cordial profile (
P1, P2) and pick it for that player. The name is what Cordial runs, so it must exist in both places.4
Start
Pick Cordial in PartyDeck and start. Each player gets a Cordial window running their own profile.
Start a game from the command line
Everything PartyDeck does is these options, so you can use them from a script, a shortcut or your own gamescope.
Without
--play and --profile, cordial behaves as it always has: one launcher, and a second start hands over to it.
Exit status, for a program that starts games: 0 the game ended normally, 1 it could not start (the reason is on stderr), 2 the command line was wrong, 3 the profile is already open in another Cordial, 4 there is no Roblox build to run, 5 the game could not open a window.
Plain gamescope
--backend headless to run with no display at all. --expose-wayland is not needed and makes no difference: Cordial uses the X11 display gamescope provides either way.
What is broken
PartyDeck guests do not work. A guest is named
.Name, which Cordial refuses as a profile name, and a fresh profile could not sign in anyway. Give every player a named profile.- Controllers. Cordial reads
/dev/input/js*, and PartyDeck leaves each instance only its own pad, so each player’s controller reaches only their window. This was tested with a stand-in device node, not with PartyDeck and real pads. The Flatpak sandbox held no input devices until--device=inputwas added to its manifest, so a Flatpak older than the release after 0.27.0 cannot see a pad; see Controllers. Whether PartyDeck’s one-pad-per-instance binding carries into a Flatpak is untested; Use the native package for split-pad play. - Mouse look. Pointer capture under gamescope has not been tested, because the test sessions had no pointer. INFERRED: it works as on any X11 window. If the camera drifts,
gamescope --force-grab-cursoris the first thing to try. - Flatpak. The handler is untested. INFERRED: a Flatpak reaches gamescope’s X11 display through
--socket=fallback-x11. If you started gamescope with--expose-wayland, add--env=CORDIAL_X11=1right afterrunin the handler’s arguments, because the Flatpak does not see gamescope’s variables. - Starting together. PartyDeck starts instances half a second apart unless a handler says otherwise, and these ask for three seconds. Two instances started half a second apart on one build store ran side by side in the one test made, which used a stand-in for PartyDeck’s command line and not PartyDeck itself.