Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
19c58d2
Refactor desktop player
zmb3 Jan 7, 2024
d5b0e61
Prevents EOF from being reported as a tdp.Notification error at the e…
Jan 12, 2024
98d63fd
Removes duplicated code, handles errors in handleRDPFastPathPDU, ensu…
Jan 12, 2024
ce6fb0f
Add dynamic/ prefix to server info labels (#36219)
atburke Jan 11, 2024
90d7b86
Address deprecation TODOs for or before v15. (#36473)
Joerger Jan 11, 2024
9c34bac
Convert insecure-drop to drop for unsupported clients (#35803)
atburke Jan 11, 2024
535e860
discovery: remove update if discovery group differs (#36472)
tigrato Jan 11, 2024
bba4055
Refactor Kubernetes Exec sessions upgrade logic (#36325)
tigrato Jan 11, 2024
eebc197
Deduplicate yarn.lock (#36560)
ravicious Jan 11, 2024
1028791
docs: updates to tsh connect your client (#36526)
stevenGravy Jan 11, 2024
4625af9
Add backend code for listing EKS clusters through AWS OIDC integratio…
AntonAM Jan 11, 2024
79baca0
Update devbox. (#36193)
mdwn Jan 11, 2024
f62abf6
Update AWS account ID used in `update-ami-ids` GHA workflow (#36556)
reedloden Jan 11, 2024
8ff20d0
Fix accesslist `tctl` (#36531)
hugoShaka Jan 11, 2024
872ac98
accountrecovery.go: Unconditionally delete the token after use (#36527)
jentfoo Jan 11, 2024
fe973c9
Add app gateways to Connect (#36393)
gzdunek Jan 11, 2024
fdb6345
Allow configuration of Okta access list importing. (#36569)
mdwn Jan 11, 2024
bdf69f6
Fix example mysql grant all command (#36519)
taraspos Jan 11, 2024
748c1b5
lib/teleterm app access: Add middleware for handling expired certs (#…
ravicious Jan 11, 2024
d99abfd
Switch to the new account settings screen (#36525)
bl-nero Jan 11, 2024
47b746d
Migrate `RotateCertAuthority` to gRPC (#36536)
Joerger Jan 11, 2024
c457e82
Update go-oidc to get final go-jose v2 -> v3 updates (#36514)
jentfoo Jan 11, 2024
7f03757
Add ClusterDropdown component (#36310)
avatus Jan 11, 2024
819db2a
fix: Verify MFA device locks during authentication (#36471)
codingllama Jan 11, 2024
5988680
Update Toggle component styles (#36535)
avatus Jan 11, 2024
901277a
Reintroduces the changes in https://github.com/gravitational/teleport…
Jan 11, 2024
542d327
Route to server by public addr (#36584)
atburke Jan 11, 2024
fe37d7e
Add EKS Discover into web testplan. (#36578)
AntonAM Jan 11, 2024
18ba776
Remove unused static token endpoints. (#36545)
Joerger Jan 11, 2024
6e07411
Merge branch 'master' into zmb3/desktop-playback-cleanup
zmb3 Jan 12, 2024
b0a4112
Ensure player finishes at 100%
zmb3 Jan 12, 2024
913e10b
Fix style for disabled progress bar
zmb3 Jan 13, 2024
ebedaa3
Remove unused file
zmb3 Jan 13, 2024
0688157
fix import order
zmb3 Jan 13, 2024
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
14 changes: 5 additions & 9 deletions docs/pages/desktop-access/reference/sessions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,15 @@ for all possible settings in the `record_session` section.

## Playback

Recorded sessions can be viewed in the *Session Recordings* page under the
Recorded sessions can be viewed in the *Session Recordings* page under the
*Activity* section in the *Management* area. Desktop recordings show a
desktop icon in the first column to distinguish them from SSH recordings.

![Desktop Session Recording](../../../img/desktop-access/session-recording@2x.png)

Click the play button to open the player in a new tab. The desktop session
player supports toggling between play and pause, but does not support seeking to
a specific point in the stream, rewinding, or restarting playback when the end
of the stream is reached. To replay a session, refresh the page.

To export desktop session recordings to video for playback outside of Teleport,
use the `tsh recordings export` command:
Click the play button to open the player in a new tab. To export desktop session
recordings to video for playback outside of Teleport, use the
`tsh recordings export` command:

```code
$ tsh recordings export <SESSION_ID>
Expand All @@ -88,7 +84,7 @@ Be aware, desktop session recordings save PNGs of changing sections of the
screen, which means they take up significantly more disk space than SSH or
Kubernetes session recordings. When using async recording modes, ensure that the
host running Teleport's Desktop Service has sufficient disk space to store
recordings that are in progress.
recordings that are in progress.

As a point of reference, when a full 1080p screen is redrawn (for example when
opening a new full-sized application window), you can expect about 250kb to be
Expand Down
4 changes: 2 additions & 2 deletions lib/srv/desktop/rdp/rdpclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ func (c *Client) Run(ctx context.Context) error {
case err := <-rustRDPReturnCh:
// Ensure the startInputStreaming goroutine returns.
close(stopCh)
return err
return trace.Wrap(err)
case err := <-inputStreamingReturnCh:
// Ensure the startRustRDP goroutine returns.
stopErr := c.stopRustRDP()
Expand Down Expand Up @@ -340,7 +340,7 @@ func (c *Client) startInputStreaming(stopCh chan struct{}) error {

msg, err := c.cfg.Conn.ReadMessage()
if utils.IsOKNetworkError(err) {
return err
return nil
} else if tdp.IsNonFatalErr(err) {
c.cfg.Conn.SendNotification(err.Error(), tdp.SeverityWarning)
continue
Expand Down
7 changes: 7 additions & 0 deletions lib/web/desktop/playback.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"context"
"encoding/json"
"fmt"
"time"

"github.com/gorilla/websocket"
"github.com/sirupsen/logrus"
Expand All @@ -47,6 +48,9 @@ const (

// actionSpeed sets the playback speed
actionSpeed = playbackAction("speed")

// actionSeek moves to a different position in the recording
actionSeek = playbackAction("seek")
)

// actionMessage is a message passed from the playback client
Expand All @@ -55,6 +59,7 @@ const (
type actionMessage struct {
Action playbackAction `json:"action"`
PlaybackSpeed float64 `json:"speed,omitempty"`
Pos int64 `json:"pos"`
}

// ReceivePlaybackActions handles logic for receiving playbackAction messages
Expand Down Expand Up @@ -90,6 +95,8 @@ func ReceivePlaybackActions(
action.PlaybackSpeed = max(action.PlaybackSpeed, minPlaybackSpeed)
action.PlaybackSpeed = min(action.PlaybackSpeed, maxPlaybackSpeed)
player.SetSpeed(action.PlaybackSpeed)
case actionSeek:
player.SetPos(time.Duration(action.Pos) * time.Millisecond)
default:
log.Warnf("invalid desktop playback action: %v", action.Action)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ export default function useTdpClientCanvas(props: Props) {
setClipboardSharingEnabled(false);
setTdpConnection({
status: 'failed',
statusText: error.message,
statusText: error.message || error.toString(),
});
};

Expand Down
Loading