Linux - NewbieThis Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place!
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I want to put:
xmodmap -e "pointer =3 2 1"
somewhere in the startup. It seems creating an .xsession is the solution.
But after I create a .xsession file in my home folder, the next time I run startx the screen just turns black. (And only for a short while can I switch to another virtual terminal, before that too becomes impossible). After deleting the file it runs OK again.
I'm not using any login/desktop manager. I use IceWM on Debian Squeeze.
Is there some script/import that has to be present in the .xsession file, or is something else going on?
Also I'd like to know what I should do when I get a black screen. Turning off the PC is such a crude method
Thanks for reading.
I want to put:
xmodmap -e "pointer =3 2 1"
somewhere in the startup. It seems creating an .xsession is the solution.
But after I create a .xsession file in my home folder, the next time I run startx the screen just turns black. (And only for a short while can I switch to another virtual terminal, before that too becomes impossible). After deleting the file it runs OK again.
I'm not using any login/desktop manager. I use IceWM on Debian Squeeze.
Is there some script/import that has to be present in the .xsession file, or is something else going on?
Also I'd like to know what I should do when I get a black screen. Turning off the PC is such a crude method
Thanks for reading.
Are you using a .xinitrc to start icewm? In that case, you can use that file instead like this:
Code:
xmodmap -e "pointer =3 2 1"
exec icewm
Whenever you get a blank screen in X, switch to a virtual terminal with ctrl-alt-f1 -> f6 and either issue a shutdown command or restart/kill the X server.
Are you using a .xinitrc to start icewm? In that case,
I'm not sure how xinit knows to start icewm, so I'm reluctant to do what you suggested.
/etc/X11/Xsession and /etc/X11/xinitrc neither contain the word icewm. The files .xsession and .xinitrc don't exist yet either.
To me it's kind of magical icewm even started after I installed it. Thanks for the reply, I'll have to look up how to stop the Xserver from a console.
Thanks, this looks promising.
By the way I type "startx" to start up. Hope that is the right command.
Didn't work, colucix. I have the .Xmodmap file in my home folder. Doesn't work.
Code:
#!/bin/sh
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)
# This is what I added
usermodmap=$HOME/.Xmodmap
[ -r "$usermodmap" ] && xmodmap -e "$usermodmap"
# The following two lines were the only ones present, except for the header
# invoke global X session script
. /etc/X11/Xsession
# I also tried putting it after that line
This is not what I meant. In the $HOME/.Xmodmap file you have to put only the following line
Code:
pointer = 3 2 1
and remove the rest (the first line #!/bin/sh included, since this is not a shell script). The line I cited above were taken from /etc/X11/xinit/xinitrc-common (just check if you have this file and if it contains the proper xmodmap command). Note that in this case the statement
Code:
[ -r "$usermodmap" ] && xmodmap "$usermodmap"
hasn't got the -e option, since it reads the expression from the specified file instead of the command line.
Ha, I missed that "-e". But I already had that pointer = line in .Xmodmap. At this point I don't have a xinitrc-common. Instead, I put it in xinitrc. It didn't work. I tried making a xinitrc-common: didn't work.
I suspect this method isn't going to work exactly like that for Debian, but thanks for trying.
I can't really help you with xinitrc, but if your keyboard is not responding after starting X, you can try the "Magic SysRq Key". Press Alt-SysRq-R and this might give your keyboard back, so you can either kill X server or switch to a VT.
do you have an /etc/X11/config or an /etc/X11/Xsession.options file? you have to enable/uncomment
Code:
allow-user-xsession
in one of these files in order to get your ~/.xsession file to work correctly. please post your /etc/X11/Xsession and your /etc/X11/xinit/xinitrc here.
I don't think there is much to see. But here are the files anyway.
Code:
#!/bin/sh
#
# /etc/X11/Xsession
#
# global Xsession file -- used by display managers and xinit (startx)
# $Id: Xsession 967 2005-12-27 07:20:55Z dnusinow $
set -e
PROGNAME=Xsession
message () {
# pretty-print messages of arbitrary length; use xmessage if it
# is available and $DISPLAY is set
MESSAGE="$PROGNAME: $*"
echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2
if [ -n "$DISPLAY" ] && which xmessage > /dev/null 2>&1; then
echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
fi
}
message_nonl () {
# pretty-print messages of arbitrary length (no trailing newline); use
# xmessage if it is available and $DISPLAY is set
MESSAGE="$PROGNAME: $*"
echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2;
if [ -n "$DISPLAY" ] && which xmessage > /dev/null 2>&1; then
echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
fi
}
errormsg () {
# exit script with error
message "$*"
exit 1
}
internal_errormsg () {
# exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
# One big call to message() for the sake of xmessage; if we had two then
# the user would have dismissed the error we want reported before seeing the
# request to report it.
errormsg "$*" \
"Please report the installed version of the \"x11-common\"" \
"package and the complete text of this error message to" \
"<debian-x@lists.debian.org>."
}
# initialize variables for use by all session scripts
OPTIONFILE=/etc/X11/Xsession.options
SYSRESOURCES=/etc/X11/Xresources
USRRESOURCES=$HOME/.Xresources
SYSSESSIONDIR=/etc/X11/Xsession.d
USERXSESSION=$HOME/.xsession
USERXSESSIONRC=$HOME/.xsessionrc
ALTUSERXSESSION=$HOME/.Xsession
ERRFILE=$HOME/.xsession-errors
# attempt to create an error file; abort if we cannot
if (umask 077 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] &&
[ ! -L "$ERRFILE" ]; then
chmod 600 "$ERRFILE"
elif ERRFILE=$(tempfile 2> /dev/null); then
if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-$USER"; then
message "warning: unable to symlink \"$TMPDIR/xsession-$USER\" to" \
"\"$ERRFILE\"; look for session log/errors in" \
"\"$TMPDIR/xsession-$USER\"."
fi
else
errormsg "unable to create X session log/error file; aborting."
fi
exec >>"$ERRFILE" 2>&1
echo "$PROGNAME: X session started for $LOGNAME at $(date)"
# sanity check; is our session script directory present?
if [ ! -d "$SYSSESSIONDIR" ]; then
errormsg "no \"$SYSSESSIONDIR\" directory found; aborting."
fi
# Attempt to create a file of non-zero length in /tmp; a full filesystem can
# cause mysterious X session failures. We do not use touch, :, or test -w
# because they won't actually create a file with contents. We also let standard
# error from tempfile and echo go to the error file to aid the user in
# determining what went wrong.
WRITE_TEST=$(tempfile)
if ! echo "*" >>"$WRITE_TEST"; then
message "warning: unable to write to ${WRITE_TEST%/*}; X session may exit" \
"with an error"
fi
rm -f "$WRITE_TEST"
# use run-parts to source every file in the session directory; we source
# instead of executing so that the variables and functions defined above
# are available to the scripts, and so that they can pass variables to each
# other
SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
if [ -n "$SESSIONFILES" ]; then
set +e
for SESSIONFILE in $SESSIONFILES; do
. $SESSIONFILE
done
set -e
fi
exit 0
# vim:set ai et sts=2 sw=2 tw=80:</code>
<code>
Code:
#!/bin/sh
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)
# invoke global X session script
. /etc/X11/Xsession
usermodmap = $HOME/.Xmodmap
[ -r "$usermodmap" ] && xmodmap "$usermodmap"
Note: that usermodmap line wasn't working.
Eventually I changed my ~/.xsession file to what roygbiiv said. It works.
...............
Now I discovered .xsessionrc : slightly different file name, but it gets called in addition to what is standard. That is usually exactly the behaviour you want.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.