diff --git a/kitty/child.py b/kitty/child.py index 14683748e..57cae8a5c 100644 --- a/kitty/child.py +++ b/kitty/child.py @@ -319,12 +319,14 @@ def fork(self) -> Optional[int]: if ksi == 'invalid': ksi = 'enabled' argv = [kitten_exe(), 'run-shell', '--shell', shlex.join(argv), '--shell-integration', ksi] - if is_macos: + if is_macos and not self.pass_fds and not opts.forward_stdio: # In addition for getlogin() to work we need to run the shell # via the /usr/bin/login wrapper, sigh. # And login on macOS looks for .hushlogin in CWD instead of # HOME, bloody idiotic so we cant cwd when running it. # https://github.com/kovidgoyal/kitty/issues/6511 + # login closes inherited file descriptors so dont use it when + # forward_stdio or pass_fds are used. import pwd user = pwd.getpwuid(os.geteuid()).pw_name if cwd: diff --git a/kitty/options/definition.py b/kitty/options/definition.py index df65c387e..5bf901692 100644 --- a/kitty/options/definition.py +++ b/kitty/options/definition.py @@ -3316,7 +3316,9 @@ allows child processes to print to kitty's STDOUT directly. For example, :code:`echo hello world >&$KITTY_STDIO_FORWARDED` in a shell will print to the parent kitty's STDOUT. Sets the :code:`KITTY_STDIO_FORWARDED=fdnum` -environment variable so child processes know about the forwarding. +environment variable so child processes know about the forwarding. Note that +on macOS this prevents the shell from being run via the login utility so getlogin() +will not work in programs run in this session. ''') opt('+menu_map', '',