[arch-general] pam_systemd works in tty but not within X or tmux

MSal msal at tormail.org
Tue Nov 27 08:55:02 EST 2012


On Mon, Nov 26, 2012 at 12:15:46AM +0300, MSal wrote:
> On Sat, Nov 24, 2012 at 07:00:10PM +0100, Tom Gundersen wrote:
> > On Nov 23, 2012 12:21 AM, "MSal" <msal at tormail.org> wrote:
> > > I asked about this in the forum. But it looks like this is a better
> > > place to discuss systemd-related issues.
> > >
> > > If I login to user1 or user2 then try to play audio which requires
> > > access to /dev/snd/* , proper access to the logged in user is set by
> > > the session and everything works correctly.
> > >
> > > But, if I login to user1 then su to user2, audio wouldn't work because
> > > access permissions are assigned to the session user only (user1).
> > >
> > > Any idea how to fix this issue?
> > 
> > Could you elaborate a bit on what you are trying to do? (there might be a
> > better way without using 'su'.
> > 
> > The behaviour you are getting is by design, so there is nothing really to
> > fix. However, you can of course make the system behave the way you want:
> > 
> > Either, assign your devices to the audio group and the same with your users.
> > 
> 
> .....
> 
> > Or add systemd_pam to the su pam file. This will create a new session for
> > you when you use su and should therefore adjust the ACLs accordingly.
> > 
> 
> pam_systemd is exactly what I was looking for. It works with
> systemd's/logind's upstream behaviour instead of working around it.
> 
> For reference, I added the following 2 lines to both /etc/pam.d/su{,-l}
> as I want a unified behaviour for all su invocations. Both files are
> backup which is an added plus:
> 
> session         required        pam_loginuid.so
> session         required        pam_systemd.so kill-session-processes=1
> 
> Warning: This will break su in already-open sessions.
> Note: "pam_loginuid.so" is an absolute requirement for this use-case not
> just a recommendation.
> 
> Check out `man 8 pam_systemd` and `man 8 pam_loginuid` for more info.

I spoke too soon. This doesn't work within X or tmux. su fails with
a PAM_SESSION_ERR message:

su: cannot not open session: Cannot make/remove an entry for the specified session

I think pts/<int> is for some reason considered an invalid argument for
tty. See logging output below.

I first enabled debugging:

-session         required        pam_systemd.so kill-session-processes=1
+session         required        pam_systemd.so kill-session-processes=1 debug=1

Then tried both cases:

1) logs from the tty case which works:

Nov 27 13:28:21 arch64 su[31178]: pam_systemd(su:session): Asking logind to create session: uid=0 pid=31178 service=su type=tty class=user seat=seat0 vtnr=2 tty=tty2 display= remote=no remote_user=user remote_host=
Nov 27 13:28:21 arch64 systemd-logind[955]: New session 47 of user root.
Nov 27 13:28:21 arch64 su[31178]: pam_systemd(su:session): Reply from logind: id=47 object_path=/org/freedesktop/login1/session/47 runtime_path=/run/user/0 session_fd=6 seat=seat0 vtnr=2

2) logs from within X or tmux where su fails at session creation:

Nov 27 13:29:21 arch64 su[31740]: pam_systemd(su:session): Asking logind to create session: uid=0 pid=31740 service=su type=tty class=user seat=seat0 vtnr=2 tty=pts/3 display= remote=no remote_user=user remote_host=
Nov 27 13:29:21 arch64 su[31740]: pam_systemd(su:session): Failed to create session: Invalid argument

The only difference is (tty=tty2) vs (tty=pts/3).


More information about the arch-general mailing list