@@ -130,9 +130,10 @@ type Server struct {
130
130
// a lock on mu but protected by closing.
131
131
wg sync.WaitGroup
132
132
133
- Execer agentexec.Execer
134
- logger slog.Logger
135
- srv * ssh.Server
133
+ Execer agentexec.Execer
134
+ logger slog.Logger
135
+ srv * ssh.Server
136
+ x11Forwarder * x11Forwarder
136
137
137
138
config * Config
138
139
@@ -188,6 +189,14 @@ func NewServer(ctx context.Context, logger slog.Logger, prometheusRegistry *prom
188
189
config :config ,
189
190
190
191
metrics :metrics ,
192
+ x11Forwarder :& x11Forwarder {
193
+ logger :logger ,
194
+ x11HandlerErrors :metrics .x11HandlerErrors ,
195
+ fs :fs ,
196
+ displayOffset :* config .X11DisplayOffset ,
197
+ sessions :make (map [* x11Session ]struct {}),
198
+ connections :make (map [net.Conn ]struct {}),
199
+ },
191
200
}
192
201
193
202
srv := & ssh.Server {
@@ -455,7 +464,7 @@ func (s *Server) sessionHandler(session ssh.Session) {
455
464
456
465
x11 ,hasX11 := session .X11 ()
457
466
if hasX11 {
458
- display ,handled := s .x11Handler (ctx ,x11 )
467
+ display ,handled := s .x11Forwarder . x11Handler (ctx ,session )
459
468
if ! handled {
460
469
logger .Error (ctx ,"x11 handler failed" )
461
470
closeCause ("x11 handler failed" )
@@ -1114,6 +1123,9 @@ func (s *Server) Close() error {
1114
1123
1115
1124
s .mu .Unlock ()
1116
1125
1126
+ s .logger .Debug (ctx ,"closing X11 forwarding" )
1127
+ _ = s .x11Forwarder .Close ()
1128
+
1117
1129
s .logger .Debug (ctx ,"waiting for all goroutines to exit" )
1118
1130
s .wg .Wait ()// Wait for all goroutines to exit.
1119
1131