LG's webOS 26 firmware broke pairing for every client that used the long-standing SSAP manifest, this one included: the pairing dialog stops appearing and the TV can no longer be reached at all. If your set has taken that update, this is the release you want. Reported and confirmed on an LG C4 by @nardigray in #16.
From 4.3, updating no longer needs a clone:
sudo lgpowercontrol updateYour settings and the TV pairing are carried over. If a pairing dialog does appear on the TV after updating, accept it with the remote.
Fixed
-
Pairing works on webOS 26. Every SSAP client has sent the same registration manifest since 2014: appId
com.lge.testplus a signature block carrying LG's old test-signing certificate. webOS 26 blacklists that certificate and answers the registration with403 Pairing rejected: blacklisted certificate detectedin well under 50 ms — before it draws the dialog, and before it looks at a stored pairing key. So no prompt ever appeared, retrying could not help, and an installation that paired years ago stopped working the moment the TV took the firmware update. The error text never reached the user either: the library reports it as the same failure as a refusal on the remote, so all it said was that authorization was denied on the TV, pointing at a dialog nobody was ever shown.lgpowercontrol now sends its own manifest with no signature at all, which every firmware accepts. The TV shows the dialog and grants what the manifest declares in the clear, which covers everything this program does: power state, foreground app, screen on and off, HDMI input and power off. Same approach as aiowebostv 0.9.2, where existing pairings were kept across the whole Home Assistant install base.
-
A failed OFF at shutdown says that the TV was left on. Every other automatic off event has a caller that logs the consequence. At shutdown the caller is systemd, which says only that the unit failed, among the last lines before the machine goes down — and it costs more there than anywhere else, because nothing runs again until boot, where
ONis a no-op on a TV that never went off. It stays on until someone picks up a remote.
Added
-
A second notification when something holds the screen on. Plasma's screen-off normally lands within a second or two of the promised moment. When it does not — a video playing in a browser tab is the usual reason — the warning used to be the last thing the user heard, and the TV simply stayed on with no explanation. Thirty seconds past the promised moment, a notification now says that something is keeping the screen on. Coming back to a lit TV is exactly when that needs to be readable. Mouse or keyboard activity during the countdown cancels it, and says so in the journal, so a warning with no screen-off after it no longer reads the same as a screen that was held on.
-
authorizesays when the TV refused the pairing itself. "Authorization failed or was denied on the TV" covered two failures that call for opposite reactions: a prompt declined on the remote, and a TV that rejected the registration without showing anything. The library raises the same error for both, but the user can tell them apart by whether a dialog appeared at all — so that is what it now asks.
Internal
-
The virtual TV can play a webOS 26 set.
tests/virtual-webos-tvgrows a--blacklist-signaturemode that rejects any signed manifest with the captured 403, and its journal now records whether the manifest it was offered carried a signature. The guard rig asserts on that in every case rather than only the new one, so sending a signed manifest again would be red everywhere. Removing the fix reproduces #16 exactly: exit 3, no endpoint reached, no prompt. -
Type-checker findings in the test suite cleared.