<div dir="ltr">Thanks for the explanation, that makes sense. I looked at the history of 'safeSpawn' and interestingly, it used to call xfork, but that was changed in this commit:<div><a href="https://github.com/xmonad/xmonad-contrib/commit/1844c80978844611f7d409cab7c313bb0c0649bf">https://github.com/xmonad/xmonad-contrib/commit/1844c80978844611f7d409cab7c313bb0c0649bf</a><br></div><div><br></div><div>The issue described in that commit, though, seems to be related to signal handlers rather than stdin (though it also sounds like the exact issue may not have been identified).</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jan 12, 2021 at 3:46 PM Tomas Janousek <<a href="mailto:tomi@nomi.cz">tomi@nomi.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>






<div>
<p>Hi Ivan,</p>
<p style="font-style:italic;color:rgb(153,153,153);font-size:80%">On Tue, Jan 12, 2021 at 10:06:06AM -0500, ivan wrote:</p>
<blockquote style="padding:0px 0.5em;margin:0px;font-style:italic;border-left:2px solid rgb(204,204,204);color:rgb(153,153,153);font-size:80%">
<p>In 'spawn', we close stdin in the child process, whereas in 'safeSpawn'<br>
from xmonad-contrib we do not. I'm curious why that's the case?</p>
<p>This commit introduced the code that closes stdin, but doesn't describe the<br>
{.quotelead}>motivation for doing so:</p>
</blockquote>
<blockquote style="padding:0px 0.5em;margin:0px;font-style:italic;border-left:2px solid rgb(204,204,204);color:rgb(153,153,153);font-size:80%">
<p><a href="https://github.com/xmonad/xmonad/commit/353e7cd6811245fbee7c8c6cf821041c924523b3" target="_blank">https://github.com/xmonad/xmonad/commit/353e7cd6811245fbee7c8c6cf821041c924523b3</a></p>
</blockquote>
<p>When you log in on a vt and do "startx $(which xmonad)", xmonad runs with fds 0, 1 and 2 connected to /dev/ttyN. If it didn't close (actually redirect from /dev/null) stdin, some programs might think they're being run from the terminal, I guess, and/or perhaps get stuck reading from it.</p>
<p>This is obviously a rather non-standard way of launching xmonad, so probably irrelevant, but:</p>
<p>The less unusual "startx" without arguments (having xmonad in .xinitrc or .xsession), /etc/X11/xinit/xinitrc invokes /etc/X11/Xsession which redirects stdout and stderr to .xsession-errors (this may be distro-specific, I'm on Debian), but it does not touch stdin, so that issue probably remains. I can't think of a specific app that breaks, off the top of my mind, but I'd be surprised if there weren't any.</p>
<blockquote style="padding:0px 0.5em;margin:0px;font-style:italic;border-left:2px solid rgb(204,204,204);color:rgb(153,153,153);font-size:80%">
<p>And should we be closing it in 'safeSpawn' as well, or does<br>
'safeSpawn' have a use-case that requires reading from stdin?</p>
</blockquote>
<p>I can't think of any such use-case. Using 'xfork' in 'safeSpawn' should be just fine.</p>
<div style="color:rgb(153,153,153);font-family:monospace;white-space:pre-wrap;margin:1em 0px 0px;font-size:80%"><span>-- </span><br>Tomáš Janoušek, a.k.a. Pivník, a.k.a. Liskni_si, <a href="https://work.lisk.in/" target="_blank">https://work.lisk.in/</a></div>
</div>
</blockquote></div>