Package: xfree86 Version: unavailable; reported 2003-03-01 Severity: wishlist Tags: patch
As requested I'm re-transmitting this as a wishlist bug. I edited the change to debian/xfree86-common.README.Debian so that it now says "4.3.0-1" instead of "4.2.1-6". 4.2.1-6 is already out the door, and I'm guessing you'd rather look at this in the 4.3.x timeframe anyway. ---- This patch moves the UNIX domain sockets created by the X server, the font server, and XIM input methods from various .subdirs of /tmp to /var/run/X11, which directory is created at boot time by the existing xfree86-common init script. This change naturally has backward compatibility implications. There are several cases to consider: * New client, old server (for any of the above): logic exists in the Xtrans client code to try an old location if the socket is not found in the new one, so this is not a problem. * New X server, old libX11: The boot script creates a symbolic link from /tmp/.X11-unix to /var/run/X11, which should prevent any trouble in this case. (Users who know they don't need this can disable it.) * New font server or input method, old X server: This is unlikely to come up, but the boot script can be edited to create more symlinks if necessary. README.Debian documents this. I did not move the socket directory for libICE, because those sockets get created by arbitrary users. The major point of moving sockets to /var/run/X11 is that that directory can be mode 755. I can think of a couple ways to get around that but they're all messy enough not to be worth it. I also did not move /tmp/.X%d-lock as that would break cohabitation of old and new X servers on the same host. zw --- xc/config/cf/linux.cf~ 2003-02-06 23:42:21.000000000 -0800 +++ xc/config/cf/linux.cf 2003-02-14 14:17:55.000000000 -0800 @@ -125,7 +125,8 @@ # define SharedLibGlu YES # define NormalLibGlu YES # define FSUseSyslog YES +# define UnixSocketsInVarRun YES /* * --- xc/config/cf/X11.tmpl~ 2003-02-06 20:56:37.000000000 -0800 +++ xc/config/cf/X11.tmpl 2003-02-14 14:21:07.000000000 -0800 @@ -562,6 +562,10 @@ #define InstallMiscManPages NO #endif +#ifndef UnixSocketsInVarRun +#define UnixSocketsInVarRun NO +#endif + #ifndef FSUseSyslog #define FSUseSyslog NO #endif @@ -704,8 +708,11 @@ #if HasFchown FCHOWN_DEFINES = -DHAS_FCHOWN #endif +#if UnixSocketsInVarRun +USLOC_DEFINES = -DSOCKETS_IN_VAR_RUN +#endif #ifndef ExtraConnectionDefs -#define ExtraConnectionDefs $(STICKY_DEFINES) $(FCHOWN_DEFINES) +#define ExtraConnectionDefs $(STICKY_DEFINES) $(FCHOWN_DEFINES) $(USLOC_DEFINES) #endif #ifndef ProjectThreadsDefines #define ProjectThreadsDefines -DXTHREADS --- xc/lib/xtrans/Xtranssock.c~ 2001-12-14 11:57:06.000000000 -0800 +++ xc/lib/xtrans/Xtranssock.c 2003-02-14 14:46:14.000000000 -0800 @@ -228,7 +228,40 @@ #define UNIX_DIR "/usr/spool/sockets/X11" #endif -#else /* !hpux */ +#elif defined(SOCKETS_IN_VAR_RUN) + +#if defined(X11_t) +#define UNIX_PATH "/var/run/X11/X" +#define UNIX_DIR "/var/run/X11" +#define OLD_UNIX_PATH "/tmp/.X11-unix/X" +#endif /* X11_t */ +#if defined(XIM_t) +#define UNIX_PATH "/var/run/X11/XIM" +#define UNIX_DIR "/var/run/X11" +#define OLD_UNIX_PATH "/tmp/.XIM-unix/XIM" +#endif /* XIM_t */ +#if defined(FS_t) || defined(FONT_t) +#define UNIX_PATH "/var/run/X11/fs" +#define UNIX_DIR "/var/run/X11" +#define OLD_UNIX_PATH "/tmp/.font-unix/fs" +#endif /* FS_t || FONT_t */ +#if defined(ICE_t) +/* ICE sockets stay in /tmp since those are created by clients. */ +#define UNIX_PATH "/tmp/.ICE-unix/" +#define UNIX_DIR "/tmp/.ICE-unix" +#endif /* ICE_t */ +#if defined(TEST_t) +/* ??? Does not appear to be used for anything. */ +#define UNIX_PATH "/tmp/.Test-unix/test" +#define UNIX_DIR "/tmp/.Test-unix" +#endif +#if defined(LBXPROXY_t) +#define UNIX_PATH "/var/run/X11/X" +#define UNIX_DIR "/var/run/X11" +#define OLD_UNIX_PATH "/tmp/.X11-unix/X" +#endif + +#else /* not hpux and not /var/run/X11 */ #if defined(X11_t) #define UNIX_PATH "/tmp/.X11-unix/X" @@ -1552,7 +1585,7 @@ struct sockaddr_un sockname; int namelen; -#if defined(hpux) && defined(X11_t) +#ifdef OLD_UNIX_PATH struct sockaddr_un old_sockname; int old_namelen; #endif @@ -1607,9 +1640,9 @@ #endif -#if defined(hpux) && defined(X11_t) +#ifdef OLD_UNIX_PATH /* - * This is gross, but it was in Xlib + * Support an older location for the socket. */ old_sockname.sun_family = AF_UNIX; if (set_sun_path(port, OLD_UNIX_PATH, old_sockname.sun_path) != 0) { @@ -1620,7 +1653,6 @@ sizeof (old_sockname.sun_family); #endif - /* * Do the connect() */ @@ -1630,7 +1662,7 @@ int olderrno = errno; int connected = 0; -#if defined(hpux) && defined(X11_t) +#ifdef OLD_UNIX_PATH if (olderrno == ENOENT) { if (connect (ciptr->fd, --- debian/xfree86-common.init~ 2003-02-06 20:54:23.000000000 -0800 +++ debian/xfree86-common.init 2003-02-14 14:59:05.000000000 -0800 @@ -4,7 +4,12 @@ set -e PATH=/bin:/usr/bin:/sbin:/usr/sbin -SOCKET_DIR=/tmp/.X11-unix + +# By default this script creates symlinks only for /tmp/.X11-unix. +# .XIM-unix and .font-unix were also moved. You can edit this list to +# create symlinks for them too. +MOVED_SOCKETS=".X11-unix" +SOCKET_DIR=/var/run/X11 set_up_socket_dir () { echo -n "Setting up X server socket directory $SOCKET_DIR..." @@ -13,17 +18,27 @@ fi mkdir -p $SOCKET_DIR chown 0:0 $SOCKET_DIR - chmod 1777 $SOCKET_DIR - echo "done."; + chmod 755 $SOCKET_DIR + echo "done." +} + +create_compatibility_symlinks () { + echo -n "Creating compatibility links:" + for l in $MOVED_SOCKETS; do + echo -n " $l" + COMPAT_DIR=/tmp/$1 + if [ -e $COMPAT_DIR -a ! -l $COMPAT_DIR ]; then + mv $COMPAT_DIR $COMPAT_DIR.$$ + fi + ln -sf $SOCKET_DIR $COMPAT_DIR + done + echo " done." } case "$1" in - start) + start|restart|reload|force-reload) set_up_socket_dir - ;; - - restart|reload|force-reload) - /etc/init.d/xfree86-common start + create_compatibility_symlinks ;; stop) --- debian/xfree86-common.README.Debian~ 2003-02-06 20:54:24.000000000 -0800 +++ debian/xfree86-common.README.Debian 2003-02-14 15:12:13.000000000 -0800 @@ -15,6 +15,12 @@ using the Debian alternatives mechanism. See update-alternatives(8) for more information. +As of version 4.3.0-1, the local domain sockets used by the X server, +the font server, and various input methods have been moved from /tmp +to /var/run. A compatibility symlink is created for the X server's +socket directory, but not the other two. If you need more +compatibility links, edit /etc/init.d/xfree86-common. + Use "dpkg --print-avail <package>" to read the extended descriptions of the XFree86 packages and get some idea of their contents.