What would happen if there were multiple active users at the same time (like with Screen Sharing, where the local GUI user and a remote user can both have active sessions)? Or with a local GUI user and another user SSH’d in?
-Greg > On Feb 25, 2016, at 5:43 AM, Ludovic Rousseau <ludovic.rouss...@gmail.com> > wrote: > > Hello, > > I am using launchd to create a Unix domain socket /tmp/foobar.socket so that > launchd starts my agent when someone connects to the sockets. > > It works fine except when Fast User Switching is involved. > > My problem is quite similar to the problem "Listening socket and fast user > switching" [1] discussed on this mailing list in 2008. The difference is that > I am using a UNIX domain socket and not a TCP socket. > > > The problematic scenario is as follows: > 1. User A logs in > 2. User A can connect to the socket > > 3. User B logs in using the Fast User Switching > 4. User B can connect to the socket > 5. User B logs out > > 6. User A comes back and fast user switch to his session. Since user A > does not _logs in_ again the socket is not changed/recreated and is still > only usable by user B > > At this step user A gets: > $ telnet /tmp/foobar.socket > Trying /tmp/foobar.socket... > /tmp/foobar.socket: Connection refused > > The socket is still present in /tmp/ but it belongs to user B and is no more > usable but user A. > > What I would like is the ability for launchd to (re)configure the Unix domain > socket each time a user authenticates to the console, either the first time > or using the fast user switching method. > > > - I use a UNIX domain socket so that only local processes can talk to the > socket and use my agent. I don't want to open my agent to other computer on > the network. > - I use launchd to start my agent on request only. That is a very nice > feature. I can't detect the user switching since my agent code is, most of > the time, not running. > - I can't use a different socket name per user since the client of my agent > does not know who is currently logged. My client application is talking to > the socket configured for whoever is logged at that time. > > > My /Library/LaunchAgents/com.foobar.plist file contains: > > <?xml version="1.0" encoding="UTF-8"?> > <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" > "http://www.apple.com/DTDs/PropertyList-1.0.dtd > <http://www.apple.com/DTDs/PropertyList-1.0.dtd>"> > <plist version="1.0"> > <dict> > <key>Label</key> > <string>com.foobar</string> > <key>ProgramArguments</key> > <array> > <string>/usr/local/lib/foobar_exe</string> > </array> > <key>Sockets</key> > <dict> > <key>Listeners</key> > <dict> > <key>SockPathName</key> > <string>/tmp/foobar.socket</string> > </dict> > </dict> > <key>ProcessType</key> > <string>Interactive</string> > </dict> > </plist> > > > Does launchd provides a solution to my problem? > > Should I open a bug at Apple to ask for this new feature in launchd? > > Thanks > > [1] https://lists.macosforge.org/pipermail/launchd-dev/2008-May/000298.html > <https://lists.macosforge.org/pipermail/launchd-dev/2008-May/000298.html> > > -- > Dr. Ludovic Rousseau > _______________________________________________ > launchd-dev mailing list > launchd-dev@lists.macosforge.org > https://lists.macosforge.org/mailman/listinfo/launchd-dev
_______________________________________________ launchd-dev mailing list launchd-dev@lists.macosforge.org https://lists.macosforge.org/mailman/listinfo/launchd-dev