Le 25/02/2014 20:53, David C. Rankin a écrit :
Thank you Francios,
On Arch the only pam file was /etc/pam.d/trinity:
/etc/pam.d/trinity
#%PAM-1.0
auth required pam_securetty.so
auth requisite pam_nologin.so
auth include system-local-login
account include system-local-login
session include system-local-login
I updated it to test the Arch kde4 /apm file:
#%PAM-1.0
auth include system-login
account include system-login
password include system-login
session include system-login
However, that made no difference (system-local-login is just an
alias of system-login). There was no 'kdescreensaver' in the Arch
TDE install, so I created a 'tdescreensaver' pam file:
/etc/pam.d/tdescreensaver
#%PAM-1.0
auth required pam_unix_auth.so
Again, it made no difference. I have poked around the mkpamserv
executable and think I can patch it for arch to generate the
tdescreensaver file on tdebase install, but I'm still not clear on
how/where in the code to insure the name 'tdescreensaver' will be
recognized as a pam file by the system. (the inter-workings of pam
are a learning experience as well). I'll test with your config and
report back. If you get the process tracking figured out, let me
know. Thanks.
Both on Mageia 4 and openSUSE 13.1, there is no TDM specific
configuration file for systemd.
The distribution use a generic "dm.service" or "xdm.service" systemd
unit, which in turns run a wrapper script that chooses among
GDM/KDM/TDM/... I think (not checked yet) that there is some magic in
there, which allows using any DM in a systemd-only distribution.
Now about the "stale tdeio_xxxx" processes.
I've read the source code in "tdelibs/tdeinit/tdelauncher.cpp".
From what I understand (I've added lots of debug output to find out):
1) The tdelauncher class is initialized line 165.
It runs a TDEServerSocket (line 197) and binds a signal "accepted"
with slot "acceptslave" (line 198).
2) The tdeserversocket is instanciated in "tdelibs/tdecore/ksock.cpp"
(line 287). Then it calls "init()" line 305, then "bindAndListen()"
line 333. It binds an "activated" signal to "slotAccept" slot.
slotAccept() line 404 in turns does the "emit accepted" line 420.
3) back to "tdelauncher.cpp", the acceptSlave() slot does the
following action: mSlaveList.append(slave) line 1360.
=> the tdelauncher keeps a reference of the tdeioslave in a list.
(mSlaveList) This list is used to know which tdeio_xxx processes are
already running.
4) Whenever konqueror opens an URL, it calls the
"TDELauncher::requestSlave" (line 1245).
This function checks if there is an already idle tdeioslave (by
parsing the "mSlaveList"), and then reuses it if appropriate (same
requested protocol, same host ...).
If no available idle tdeioslave is there, it spawns a new one.
After adding lots of kddebug output, I've found that, on my system,
we go correctly from step 1 to step 2: The "emit accepted" is run
correctly every time. However, for an unknown reason, this signal is
NOT received by the tdelauncher, so the "acceptslave" slot is NEVER
run.
Then, the "mSlaveList" variable is never populated.
As a consequence, the tdelauncher NEVER reuses an existing
tdeioslave, it spawns a new one every time.
Also, the "idleTimeout" slot (line 1404) does nothing at all, since
there is no process to terminate in the mSlaveList !
The actual question is: why is the "emit accepted" signal never
received ??? It causes lots of troubles.
Francois
Francios,
One problem that I've found is WITH_CONSOLE_KIT is hard-coded in
tdebase/tdm/backend/dm.h (line 40):
#define WITH_CONSOLE_KIT
So all builds are building as if consolekit is present even if
consolekit is NOT installed. How do we wrap this define in a
conditional check so WITH_CONSOLE_KIT is only defined if consolekit is
actually present?