Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ daemon ship together under one version.

### Added

- Cast a **new monitor** instead of mirroring one you already have. A toggle
above the device list switches between *Mirror screen* and *New monitor*; in
the second mode the desktop gains an extra display, sized to what the receiver
accepts, that exists only for as long as the cast. The television becomes a
real second screen you can drag windows onto rather than a copy of your laptop
panel, and it is no longer letterboxed to fit it. Needs a Wayland session -
GNOME on Xorg cannot create a monitor, so the toggle is hidden there.
*Choose what to cast* also lists GNOME's own Virtual Monitor option now.
- Eleven more interface languages: Arabic, Bengali, Bulgarian, Chinese
(Simplified), French, Hindi, Indonesian, Portuguese (Brazil), Russian,
Spanish and Urdu.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GNOME Shell Cast

Cast your **whole screen or a single window** to a **Chromecast** device, or send your **system audio** to a Chromecast speaker, smart display, or cast group, right from the GNOME Shell top panel.
Cast your **whole screen or a single window** to a **Chromecast** device, add a **new monitor** and cast that instead, or send your **system audio** to a Chromecast speaker, smart display, or cast group, right from the GNOME Shell top panel.

The project has two parts, shipped together in this repository:

Expand Down Expand Up @@ -29,7 +29,7 @@ The two talk over the D-Bus session bus (`org.gnome.ShellCast1`). The daemon is

Chromecast's Default Media Receiver plays media it pulls over HTTP. When you start a cast:

1. The daemon opens an XDG ScreenCast portal session - GNOME shows its native picker for a monitor or a window.
1. The daemon opens an XDG ScreenCast portal session - GNOME shows its native picker for a monitor or a window. In *New monitor* mode it asks the portal for a **virtual monitor** instead: GNOME creates an extra display for the cast and removes it again when the cast ends, so nothing on your own screens changes. Move windows onto it with `Super`+`Shift`+arrow; until you do, the television shows an empty desktop. This mode needs a Wayland session.
2. A GStreamer pipeline captures the PipeWire stream, encodes H.264 video and AAC system audio, and writes a live HLS stream into `$XDG_RUNTIME_DIR/gnome-shell-cast/`.
3. A tiny built-in HTTP server serves that stream on your LAN.
4. The daemon tells the Chromecast (CASTv2 protocol) to play the stream URL.
Expand Down
32 changes: 32 additions & 0 deletions TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,38 @@ The receiver app exited or never started rendering. Check the log for
[The cast falls back to HLS](#the-cast-falls-back-to-hls-or-the-receiver-never-answers)
below.

### "New monitor" is missing from the menu

That mode is only offered on a **Wayland** session, because GNOME on Xorg cannot
create a monitor. Check which one you are on:

```sh
echo $XDG_SESSION_TYPE
```

If it says `x11`, log out and pick *GNOME* rather than *GNOME on Xorg* at the
login screen. Casting the screen normally works either way.

### The new monitor shows only the wallpaper

Nothing has been moved onto it yet - a new monitor starts empty, the same as
plugging in a second screen. Move the window you want with
`Super`+`Shift`+`Right`, or drag it past the edge of your own screen. *Settings →
Displays* shows where GNOME placed the new monitor relative to the others.

### `The system could not create a new monitor for this cast.`

GNOME accepted the request and then failed to make the monitor. Almost always an
Xorg session (see above); otherwise the compositor refused the size. The real
reason is in the shell's own log, not the daemon's:

```sh
journalctl --user -b -u org.gnome.shell.service | grep -i 'virtual monitor'
```

`Backend doesn't support creating virtual monitors` confirms Xorg. Cast the
screen normally in the meantime.

---

## Connection
Expand Down
Loading
Loading