-
-
Notifications
You must be signed in to change notification settings - Fork 0
Big Screen
The couch face of the machine: one full-screen surface of tiles you drive with a controller, from four metres away, with the keyboard left on the table.
syn-arcade big start # or Super+F10, or the pad's GUIDE button
syn-arcade big autostart on # …and open it at login instead of the desktopA television is not a monitor with a bigger number. Every desktop convention — a titlebar, a 12-pixel close button, a menu you aim at — fails at sofa distance, so this is a separate interface rather than a scaled one.
- Your installed Steam library, with its cover art, most recently played first
- Steam Big Picture, optionally through gamescope for a TV that is not your desktop's resolution
-
GeForce NOW, wherever
syn-gfnis installed — see Gaming. It takes both a pointer and a keyboard, unlike the launchers beside it: those are applications with their own controller support, and this is a web page until a game starts, so choosing one takes a cursor and signing in the first time takes letters - Whatever launchers and media players are actually on the machine
- A web browser, a terminal and the controller window
- Music — see below
- Headlines
- The machine's own switches — desktop, sleep, restart, power off — behind Start, along with Settings
Nothing is listed that is not installed. A tile you can press is a tile that works.
Across the top, newest first, capped at eight — the last things this machine opened.
It is the desktop's list, not big screen mode's. That distinction is the
whole feature: a tally of what had been launched from the television is empty for
anybody who opens big screen mode, looks at it and goes back to the desktop,
which is what "recently opened" plainly does not mean. synui keeps it at the
one moment every launch has in common — a window turns up — so the start menu,
the dock, the app grid, a desktop icon, the file manager and a terminal all
count, and no launcher can forget to remember one. synctl recent prints it.
It stores ids and looks each one up when the shelf is drawn, so a tile whose
program has been removed is simply not drawn, and returns to its place if it
comes back. The way out (desktop) and the machine's own switches are
deliberately not entries — a "recently opened" row whose first item is "go back
to the desktop" is a row nobody reads twice.
It is a bar, first among Play/Media/Apps, rather than a shelf of its own: a whole row of a television for four tiles is exactly the mistake the shelf order was rearranged to undo.
The Steam library is read the way Steam stores it, which is three questions and
not one: libraryfolders.vdf for every drive Steam has been pointed at (a
scanner that reads only your home directory finds the runtimes and none of the
games), a manifest per installed app, and a cover-art cache that has had three
on-disk layouts and still has all three on any machine that has run Steam for a
few years. Proton and the Steam Linux Runtimes are dropped — --all puts them
back.
Super+F10
|
start it, or show/hide it if it is already running |
| Guide on the pad | the same, in both directions — from the desktop it brings big screen mode back, from inside it takes you to the desktop |
syn-arcade big stop |
close it for good |
It steps aside rather than closing. Opening the browser, the terminal or the controller window unmaps the surface and leaves the shell running; it comes back when you close what you opened, or the moment you press Guide.
That is why big stop exists as a separate verb. A layer-shell surface is not a
toplevel — it appears in no dock and no window switcher, so without it the only
exit was "hidden for the rest of the session".
A tile press fills the television. From a sofa, a titlebar and a strip of wallpaper around the edge are the whole difference between an appliance and somebody's computer left switched on, so launching from a tile fullscreens what it opened.
The tile plays from a source, chosen once and remembered:
syn-arcade big music source # what is available, and which is picked
syn-arcade big music source plex # choose one (see the ids below)<id> |
Source | What it needs |
|---|---|---|
plex |
Plex | a server on your network — found by broadcast, no address to type |
ytmusic |
YouTube Music | nothing, to play. See the note below |
spotify |
Spotify | an account, through cliamp's own sign-in |
local |
Local files | your music folder |
radio |
Radio | nothing — cliamp carries the stations |
Spotify is browsed inside cliamp's own interface and nowhere else, so choosing it opens cliamp on the television rather than filling a queue from a tile. The other four are reachable from outside it, which is what lets the tile end in music.
Jellyfin is not a music source — it appears as a media-server tile
(big media), found on the network the same way.
syn-arcade big music plex # the albums in the Plex library
syn-arcade big music plex <id> # play one — the queue becomes that album
syn-arcade big music play|toggle|next|prev|stop
syn-arcade big music setup # cliamp's sign-in wizard, in a terminal
syn-arcade big music install <id> # what a source needs before it can playChoosing a source is a setting, not a transport command. Picking one on a silent machine used to start playing. It does restart the player, though — cliamp takes
--providerat start-up and has no verb to change it afterwards, so switching source stops and restarts the music. There is no gentler mechanism, and a picker that quietly did nothing until the next reboot would be worse.
Signing in is a browser — Google cookies, not an API key or a Cloud project — and it is for browsing: your own playlists, and a search you can type from the sofa with the on-screen keyboard. Playback itself works signed out.
syn-arcade big music install ytmusic fetches what streaming needs (yt-dlp);
without it the provider is present and returns nothing, which is the one failure
that looks like an account problem and is not.
cliamp — and big screen mode drives it rather than launching it, over its
own socket, so the Now Playing row in Start controls playback with nothing on
screen. music = cliamp in ~/.config/syn-arcade/big.conf is the default; any
other player becomes a tile that opens a window somebody then has to get out of
with a gamepad.
big transport is the other half and is not the same thing: it acts on
whatever is making noise, over MPRIS — Spotify, a film, a browser tab — which is
what the media buttons along the bottom of the screen use.
projectM, listening to the monitor of whatever audio output is in use rather
than to a microphone. It is a tile, a row in Start, and a chord: both stick
clicks at once, or V.
The chord exists because the visualizer is the one thing somebody turns on while something is already playing, and three rows into a menu is the wrong distance for that. L3 and R3 mean nothing on their own — only the pair says a word.
Behind the Now Playing row, the meter is cliamp's own FFT bands, streamed a
frame per line.
Everything is words on a pipe — up, accept, page-right, one per line,
read by exactly one process. Nothing is synthesised into the desktop, so a stray
event cannot land in a window you left open, and stick drift cannot arrive as
held arrow keys in every text field on the machine.
A keyboard and a mouse work too, mapped onto the same words: the machine that is
a television in the evening is a desktop in the afternoon. The wheel is one of
them — it is accumulated into notches and sent as up/down, so it reaches
the shelves, the Start menu, the media buttons and the on-screen keyboard without
any of them knowing a wheel exists.
The one exception is a browser, which takes pointer events and cannot be driven with words. So while one is on screen:
-
the controller is a mouse — left stick moves the pointer, right stick
scrolls,
Aclicks,Xright-clicks, the shoulders are Back and Forward -
an on-screen keyboard — Start opens it,
Atypes,Xis backspace,Yis space, the shoulders change layout,Bcloses it. There is an Address key, which isCtrl+L: a browser you cannot type a URL into can only follow links somebody else opened
Both stop the instant big screen mode comes back.
A Media Center remote — CEC over HDMI, or infrared through a receiver — arrives
as ordinary key presses: the kernel's rc-core turns each button into a KEY_*
code and xkbcommon gives it a keysym. There is nothing to configure for the
remote as a device. What was missing was that several of its buttons landed on
nothing at all.
| Button | What it does |
|---|---|
| Green (Media Center) | Opens big screen mode from the desktop, and steps it aside again from inside — the same toggle Super+F10 is |
| OK | Select |
| Back, Exit | Up one level |
| Info | The Start menu |
| Guide | Out to the desktop, leaving big screen mode running |
| Arrows | The selection; channel up/down jumps a shelf at a time |
| Play / Pause | Play-pause, on whatever is making the noise |
| Stop, skip, rewind / fast-forward | The transport |
| Record | Starts or stops a screen recording |
| Power | Opens a selector: Desktop, Quit, Sleep, Restart, Power off |
⛔ The Power button asks rather than acts. Sleep, restart and power off are three irreversible things and a remote has one button for them; a key wired straight to any of them is a key that does the wrong one, from four metres away, with somebody's game still running. The selector opens with Desktop selected, which is the harmless row.
⛔ Back is not Escape. Escape quits, deliberately — somebody at a keyboard has a way back that somebody on a sofa does not. Back is the most-pressed button on a remote and means "up one level"; folding the two together would mean the first press of it closed the interface, and the way back in is a key combination nobody holding a remote can press.
⚠ Three of those buttons are invisible to Qt. OK, Info and Guide send
KEY_OK, KEY_INFO and KEY_EPG, which xkeyboard-config names XF86OK,
XF86Info and XF86MediaSelectProgramGuide — and Qt has no Qt::Key for any of
them, so the key code a program receives is literally zero. KEY_NEXT and
KEY_PREVIOUS have no keysym at all. Those five are matched on the hardware
scancode instead, which is why they work here and do nothing in most
applications.
⚠ Pause is not a media key. rc-core sends KEY_PAUSE for it — the same
code as a keyboard's Pause/Break — so it arrives as plain Pause, never as the
XF86AudioPause a keyboard's play controls send. Play worked and Pause did
nothing until 0.1.0-55 for exactly that reason.
The green button's shortcut is written into ~/.config/synui/synuirc by
syn-arcade binds install, alongside Super+F10. If you already have
XF86AudioMedia bound to something of your own, yours is left alone and the
rest of the block still refreshes.
A game that renders at 640×480 has no idea what a 1440p monitor is, and sits as a postage stamp in the middle of a black screen. gamescope fixes that, and the line is hard to remember:
gamescope -w 1024 -h 768 -W 2560 -H 1440 -f -F fsr -- wine Sims.exe
syn-arcade fit writes it for you and gives it a menu entry:
syn-arcade fit new --name="The Sims" --exec="wine Sims.exe" --game=1024x768
syn-arcade fit new --from=/usr/share/applications/thegame.desktop
syn-arcade fit # the wrappers you have made
syn-arcade fit command <id> # the command line it builds, to check or copy
syn-arcade fit run <id> # what the menu entry runs⚠
-w/--gameis what the GAME renders at;-W/--screenis the monitor. Getting them the wrong way round produces a wrapper that runs and looks worse than no wrapper.
--screen defaults to your primary monitor, --filter to FSR, and
--force-window, --grab, --overlay and --gamemode are there for the games
that need them.
Start ▸ Settings, three pages, every row a press of A — and the same
list on the Big screen tab of syn-arcade gui, drawn for a mouse instead of
a d-pad. Neither window keeps its own copy of what a setting can be: both draw
whatever syn-arcade big settings reports, so the two cannot disagree.
A switch each for Running, Games, Recent, Play, Media, Apps and News. A machine used as a console does not need a headlines row; one wired to a stereo may want nothing but Media and Music.
A shelf switched off is not drawn and is not navigable — the same state an empty one is already in, which is why nothing else had to be taught about it. The selection is remembered by name, so a shelf switched back on gets its place back.
Whether the menu offers the Visualizer row, and whether it offers Sleep, restart and power off. The second is for a machine other people can reach.
⛔ Desktop and Quit have no switch, deliberately. They are the way out of a full-screen surface that owns the keyboard, and on a gamepad there is no key combination to fall back on — a setting able to hide them would be a setting able to trap somebody in front of their own television. The three power rows are safe to hide because leaving is still there when they are gone.
Keep the screen awake — never, while playing, or always.
⚠ Big screen mode has no timeouts of its own, and must not. Dim, blank, lock
and suspend are synui's idle machine, and every stage of it asks first whether
anything holds a Wayland idle inhibitor. This setting decides whether big screen
mode is one of the things holding one. It is the same rule the Sleep tile
follows in running systemctl suspend rather than reimplementing it — there has
to be one definition of "suspend this machine", or the couch and the desk drift
apart.
while playing is the default because of two cases nothing else covers:
-
Music through
cliamphas no surface. It is a headless player driven over a socket — no window, no MPRIS inhibit, nothing for the compositor to notice — so the desktop dims, blanks and eventually suspends in the middle of an album. Firefox and mpv hold their own inhibitor throughorg.freedesktop.ScreenSaver; this one cannot. -
A gamepad is not Wayland input. A controller-only game is read from evdev
by
syn-arcadeitself; the compositor sees no pointer and no key for as long as somebody plays, and counts the whole session as idle.
always holds it for as long as big screen mode is up, which on a launcher left
showing a menu all night is a machine that should have slept at midnight and is
warm at eight. That is why it is not the default.
The inhibitor is synui's own helper and is released by the holder exiting,
so whatever ends big screen mode — including a crash — releases it too.
Everything on the settings pages is ~/.config/syn-arcade/big.conf, and
syn-arcade big settings is the same thing at a prompt:
syn-arcade big settings # every row, and what it is set to
syn-arcade big settings show_news off
syn-arcade big settings keep_awake next # the next value round — what A doesoutput = HDMI-A-1 # a connector name, `primary` or `focused`
music = cliamp
music_source = plex
show_news = off
keep_awake = playing # never | playing | alwaysWithout output = it opens on the primary screen. It used to resolve the
screen as "wherever I am", which synui answers from the output under the
cursor — so a big start typed in a terminal on the second monitor opened the
ten-foot interface on the second monitor.
syn-arcade binds # whether the gaming keys are installed
syn-arcade binds install # add them to synuirc| Key | Does |
|---|---|
Super+F10
|
big screen mode |
Super+F11
|
toggle the MangoHud overlay, inside a running game |
Super+F12
|
move it |
These are there on a fresh install since 0.2.9 — your session runs
binds ensure, which refreshes a block that exists or writes one where there is
none. A block you deliberately removed stays removed.
syn-arcade big guide off turns off the Guide-button watcher if you would
rather the pad's Guide button went to Steam.
See also: Gaming for the overlay, controllers and Proton · Commands · Keybindings
Using it
- Installation
- Welcome Guide
- Updating
- Software
- Files
- Settings
- Calendar
- Editor
- Studio
- Terminal
- Keybindings
- Speech and dictation
- Remote Desktop
- Commands
- Configuration
- Nix
- Gaming
- Big Screen
- DaVinci Resolve
- Secure Boot
- Troubleshooting
Customising it
Components
Apps
Hacking on it