Running X window programs from PM suspend-resume scripts

Chris Tyler chris at tylers.info
Mon Mar 22 20:52:41 UTC 2010


On Mon, 2010-03-22 at 22:38 +0200, Serguei Miridonov wrote:
> On Monday 22 March 2010, Chris Tyler wrote:
> > On Mon, 2010-03-22 at 21:10 +0200, Serguei Miridonov wrote:
> > > Hello,
> > > 
> > > Is there a trick to run X window programs from PM suspend-resume
> > > hooks? For example, I need to restore keyboard mapping after
> > > suspend to RAM using
> > > 
> > > xkbcomp some_file.xkm :0.0
> > > 
> > > Running this in
> > > 
> > > #!/bin/bash
> > > DISPLAY=":0.0"
> > > export DISPLAY
> > > case $1 in
> > > 
> > >     hibernate | suspend)
> > > 	
> > > 	;;
> > > 	
> > >     thaw | resume)
> > >     
> > >         sleep 2
> > > 	
> > > 	chvt 1
> > > 	sleep 1
> > > 	xkbcomp /etc/X11/GoodKeyMap.xkm $DISPLAY
> > > 	;;
> > > 	
> > >     *)
> > >     
> > >         ;;
> > > 
> > > esac
> > > exit 0
> > > 
> > > gives an error: Cannot open display ":0.0"
> > > 
> > > Any idea?
> > 
> > Sounds like a problem with auth. Try setting the XAUTHORITY
> > environment variable, perhaps?
> 
> OK, I have changed the script adding the line
> 
> user=`who | grep -e ' :0' | sed 's/ *:0.*$//'`
> 
> and then running the required command as
> 
> su - $user -c "xkbcomp /etc/X11/GoodKeyMap.xkm $DISPLAY"
> 
> It works now. Is there a something simpler?

This works because, with a HOME directory specified, the xkbcomp command
can find the ~/.Xauthority file to get the magic cookie for display
connection authentication.

You should be able to set the XAUTHORITY environment variable to the
absolute path of the .Xauthority file instead of using su (try something
like: export XAUTHORITY=/home/${user}/.Xauthority)

-Chris



More information about the users mailing list