GDM Configuration Overhaul
By user9149671 on Dec 26, 2005
Just in time for the 2.13.4 release, the GDM configuration system has just been overhauled. Thanks to work by Dennis Cranston and Calum Benson, the gdmsetup program has a completely new modern look. Previously it was violating the HIG by having 8 tabs while the HIG specifies you should not have more than 6 tabs. Now gdmsetup has a more reasonable 5 tabs.
Internally the GDM configuration is much more sane and maintainable. In previous releases, the GDM daemon and all of the slave programs had their own logic for reading the gdm.conf file. Validation and processing was inconsistant and could cause strange inconsistancies. Furthermore the GDM "GET_CONFIG" and "SET_CONFIG" commands (accessed via gdmflexiserver --command) only supported some keys.
Now the GDM daemon does all the processing interacting with the configuration file and all slave programs use the "GET_CONFIG" sockets command to get the configuration values from the daemon. The code now is better encapsulated so that only one file in the daemon and one file in the slave source code knows about configuration or needs access to libvicious (used for parsing the file). The slave code caches the values so that subsequent accesses to the same configuration value are pulled from a cache rather than calling the GET_SOCKETS command multiple times. This makes the slaves do a lot more work over the sockets protocol and this has been modified so that the socket is kept open and only shutdown/rebuilt when needed, keeping GDM reasonably fast.
Now GDM now has an /etc/X11/gdm/gdm.conf-custom file where users are expected to put their configuration customizations. The /etc/X11/gdm.conf file now is installed with 444 permissions and the comment at the top recommends that the file not be edited by hand. If you run gdmsetup, it will properly update the gdm.conf-custom file. For all configuration options, GDM first checks the gdm.conf-custom file and uses the value if found there and only uses the value in gdm.conf if no value is found. This works for both the normal key/value options as well as the [server-foo] and the [servers] sections of the configuration. This adds a few useful features to GDM.
- It makes GDM configuration cleaner. It is easier to tell what customizations have been made to GDM just by looking at the files.
- It is now possible to put the gdm.conf file on a shared directory (via the --with-configdir configure option or by running the daemon with --config) so that multiple machines can share the same configuration and the gdm.conf-custom file allows the sysadmin of the machine to override particular settings if desired.
- Distros can now just stomp the /etc/X11/gdm/gdm.conf file on updgrade or to fix an issue or security problem knowing that any user customizations will not be affected since they are in a separate file. This means users can upgrade GDM and get the latest gdm.conf file without losing any customizations.
GDM install will now compare the factory-gdm.conf file and the gdm.conf file and will move the user's gdm.conf file to gdm.conf-custom if they are different so that users won't lose their configuration if they rebuild and reinstall GDM from source.
I've also fixed a few annoying bugs in GDM recently. In GDM the Welcome and RemoteWelcome messages support special character sequences like %n (for machine name). Unfortunately gdmlogin and gdmgreeter were using completely different code for dealing with these character sequences and they had some inconsistancies and conflicts. gdmlogin supported %d as DISPLAY while gdmlogin supported it as timed login delay (in seconds). Also none of these sequences were documented at all. I've updated the code so now gdmlogin and gdmgreeter use the same code and the sequences are properly documented in the generated docs. Another bug I fixed was an issue with timed login. If timed login is turned on, and GDM is asking for the username, and the user just hits return without entering a username, then GDM just assumes you want to go ahead and login as the timed user. This is only supposed to do this if the greeter is asking for the Username, but gdmlogin was also working this way when asking for the Password, which was confusing. So now it is fixed and only does this when Username is requested. Also the docs are updated so this behavior is more clear.
In other news, I think I finally got the SunAudio sink ready for GStreamer 0.10. Refer to bugzilla bug 321269. This fixes two previous problems with the sunaudio plugin. First, set_mute now works. Previously if you muted with the mixer applet, you could not un-mute. Now set_mute sets the volume to 0 on mute and resets the volume to the right value on unmute, which makes the mixer applet much happier. Secondly the mixer applet honors AUDIODEV so it works in a SunRay environment. The bug also contains an 0.8 patch so that people can rebuild gst-plugins 0.8 to work better. I'm not sure if the GStreamer folks will be releasing another 0.8 release, but if they do then hopefully this fix will get in as well.
I've also been working on the new GStreamer MP3 plugin. Sun has a contract with MP3 so that we can include this plugin in our distro. I've followed the steps to build this plugin at Fluendo's web site, but the code doesn't build since there seems to be a missing mp3-c.h file which is required by mp3tl.c. I've sent an email to the GStreamer team and hopefully this will get fixed soon.
Happy holidays everyone!