Skip to content

Commit fd84df7

Browse files
kylecarbsmafredri
andauthored
fix: add DISPLAY env var for X11 connections (#7248)
* fix: add `DISPLAY` env var for X11 connections * Update agent/agentssh/agentssh.go Co-authored-by: Mathias Fredriksson <mafredri@gmail.com> --------- Co-authored-by: Mathias Fredriksson <mafredri@gmail.com>
1 parent f9da263 commit fd84df7

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

agent/agentssh/agentssh.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,15 @@ func (s *Server) sessionHandler(session ssh.Session) {
172172

173173
ctx := session.Context()
174174

175+
extraEnv := make([]string, 0)
175176
x11, hasX11 := session.X11()
176177
if hasX11 {
177178
handled := s.x11Handler(session.Context(), x11)
178179
if !handled {
179180
_ = session.Exit(1)
180181
return
181182
}
183+
extraEnv = append(extraEnv, fmt.Sprintf("DISPLAY=:%d.0", x11.ScreenNumber))
182184
}
183185

184186
switch ss := session.Subsystem(); ss {
@@ -192,7 +194,7 @@ func (s *Server) sessionHandler(session ssh.Session) {
192194
return
193195
}
194196

195-
err := s.sessionStart(session)
197+
err := s.sessionStart(session, extraEnv)
196198
var exitError *exec.ExitError
197199
if xerrors.As(err, &exitError) {
198200
s.logger.Debug(ctx, "ssh session returned", slog.Error(exitError))
@@ -209,9 +211,9 @@ func (s *Server) sessionHandler(session ssh.Session) {
209211
_ = session.Exit(0)
210212
}
211213

212-
func (s *Server) sessionStart(session ssh.Session) (retErr error) {
214+
func (s *Server) sessionStart(session ssh.Session, extraEnv []string) (retErr error) {
213215
ctx := session.Context()
214-
env := session.Environ()
216+
env := append(session.Environ(), extraEnv...)
215217
var magicType string
216218
for index, kv := range env {
217219
if !strings.HasPrefix(kv, MagicSessionTypeEnvironmentVariable) {

agent/agentssh/x11.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,14 @@ func (s *Server) x11Handler(ctx ssh.Context, x11 ssh.X11) bool {
5252
s.logger.Warn(ctx, "failed to get server connection")
5353
return false
5454
}
55-
listener, err := net.Listen("unix", filepath.Join(s.x11SocketDir, fmt.Sprintf("X%d", x11.ScreenNumber)))
55+
// We want to overwrite the socket so that subsequent connections will succeed.
56+
socketPath := filepath.Join(s.x11SocketDir, fmt.Sprintf("X%d", x11.ScreenNumber))
57+
err := os.Remove(socketPath)
58+
if err != nil && !errors.Is(err, os.ErrNotExist) {
59+
s.logger.Warn(ctx, "failed to remove existing X11 socket", slog.Error(err))
60+
return false
61+
}
62+
listener, err := net.Listen("unix", socketPath)
5663
if err != nil {
5764
s.logger.Warn(ctx, "failed to listen for X11", slog.Error(err))
5865
return false

0 commit comments

Comments
 (0)