From mboxrd@z Thu Jan 1 00:00:00 1970 To: 9fans@cse.psu.edu Subject: Re: [9fans] how to run rio from plan9port? From: "Russ Cox" Date: Sat, 3 Nov 2007 14:33:40 -0400 In-Reply-To: <5ce9f1900711030653l39f604f4j6052eb61ac1bd510@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Message-Id: <20071103183341.9CCC91E8C55@holo.morphisms.net> Topicbox-Message-UUID: e83d9f3c-ead2-11e9-9d60-3106f5b1d025 > I had installed plan9port in debian. Now I learn it. If I try to run rio as > > $ startx $PLAN9/bin/rio > > rio started. But if I say "New" so as to create terminal. But X Window > Systems say: > > --- rio: X_KillClient(0x600001): BadValue (integer parameter out of > range for operation) I've never seen this and have no idea what it means. > what is it? how to configure rio? > > I have find a lot of documentation about plan9, but I have not been > finding documentation about base plan9port concept: how it work, how > it intercommunicated with unix environment, how it configure? Give me > any urls please. In general there is no configuration of plan9port other than what you are told at the end of the install: set $PLAN9 in your profile along with adding $PLAN9/bin to your path. That is, the programs themselves require almost no configuration. What little is needed is mentioned in intro(1). You might find it useful to customize the Unix startup scripts to run your favorite programs, but that's different. Here's what I do. First of all, when you log in your shell typically runs $HOME/.profile. If you use bash then it looks for $HOME/.bash_profile first. I work around this: $ cat $HOME/.bash_profile . ~/.profile $ And then my .profile says: $ cat $HOME/.profile OS="`uname | tr A-Z a-z`" ARCH="`uname -m | sed 's;i.86;x86;'`" BIN=$HOME/bin:$HOME/bin/$OS:$HOME/bin/$OS/$ARCH PLAN9=/usr/local/plan9 PATH=.:$BIN:$PATH:$PLAN9/bin:/usr/bin/mh # Browser used by web(1) and thus plumber. BROWSER=firefox # This is still needed on OS X, which is about a decade behind. CVS_RSH=ssh # Plumb files instead of starting new editor. EDITOR=E unset FCEDIT VISUAL # Let gs find the plan9port document fonts. GS_FONTPATH=$PLAN9/postscript/font # Make sure mpage prints in letter mode. MPAGE="-t -bLetter" # Get rid of backspace characters in Unix man output. PAGER=nobs # Prompt (is almost a no-op in bash) H=`hostname | sed 's/\..*//'` PS1=$H'=; ' # Default font for Plan 9 programs. font=$PLAN9/font/lucm/unicode.9.font # Equivalent variables for rc(1). home=$HOME prompt="$H=;  " user=$USER export \ BROWSER\ CVS_RSH\ EDITOR\ FCEDIT\ GS_FONTPATH\ H\ MPAGE\ PAGER\ PATH\ PLAN9\ PS1\ VISUAL\ font\ home\ prompt\ user\ # Dump core files by default. ulimit -c unlimited # Tell core(1) where to find core files. if [ -d /core/rsc ]; then COREDIR=/core/rsc; export COREDIR fi . $HOME/.bashrc autostartx $ I'm using bash as my default shell (sorry rc fans) so some things need to be done at the start of every bash instance, not just the first one. These things are in my .bashrc, included by the profile for good measure: $ cat $HOME/.bashrc _cd () { \cd "$@" && case "$TERM!$-" in linux!*) ;; *!*i*) awd esac } alias cd=_cd set +o emacs set +o vi set -a # autoexport [ -z "$PLAN9" ] && . $HOME/.profile $ The cd alias sets the current window label using awd (see label(1)) unless the window is on the Linux console. This also helps 9term send correct plumbing messages. The meaning of the "set" commands is the reverse of what you'd expect: the three above turn *off* emacs and vi line editing and turn *on* autoexport of environment variables (like in rc). Turning off the line editing keeps GNU readline out of the picture so that editing the command line in 9term works (see 9term(1)). The last line invokes .profile if $PLAN9 is not set; explained below. After running .bashrc, .profile runs autostartx, which starts X11 if the current terminal is tty1 (virtual terminal 1 on Linux): $ cat $HOME/bin/autostartx #!/bin/sh if [ "`/bin/ls -l /proc/self/fd/0 2>/dev/null | awk '{print $NF}'`" = '/dev/tty1' ] then # echo # echo Console login. NAMESPACE=/tmp/ns.`hostname` export NAMESPACE rm -rf $NAMESPACE; mkdir $NAMESPACE # echo ' name' space $NAMESPACE # echo Starting factotum. 9 factotum -n echo -n secstore '' aescbc -d < $HOME/lib/secstore.aes | 9p write -l factotum/ctl # echo Starting SSH agent. eval `9 ssh-agent -e` startx fi $ I override $NAMESPACE (see intro(4)) because X11 is not running yet (that makes sense if you read intro(4)) but I want to start factotum. I load factotum's keys from an AES-encrypted file in my home directory and then start the Plan 9 ssh agent, which mediates between Unix ssh and Plan 9 factotum (see factotum(4) and ssh-agent(1)). Startx starts X11, runs .xinitrc, and then stops X11. To run rio as my window manager, I put it in .xinitrc: $ cat $HOME/.xinitrc plumber riostart rio & sleeper $ Running plumber first makes sure it is available to all the programs I'm about to start. Riostart is a shell script that starts my stats and acme windows where I want them to be, and also starts firefox: $ cat $HOME/bin/riostart #!/usr/local/plan9/bin/rc stats -W 100x100@0,0 -lmisce switch(`{hostname}){ case tux acme -a -W 1592x1092@0,104 -l lib/acme.dump & case x40 acme -a -W 1016x660@0,104 -l lib/acme.dump.small & case t23 * acme -a -W 1392x942@0,104 -l lib/acme.dump & } firefox & $ When .xinitrc exits, startx makes X exit. Typically the window system is the last thing .xinitrc runs, but then when it exits, X does. I run "sleeper" so that I can kill and restart rio (or other window managers) without losing my X session. $ cat $HOME/bin/sleeper #!/bin/sh while true do sleep 1000 done $ So that's everything from me logging in to having some programs up and running. There is one other situation worth mentioning. On typical Linux systems these days, X gets started before you log in. You get a nice gui login screen instead of logging in on tty1 and running startx by hand (or by script). In that case, after you've logged in, X runs $HOME/.xsession to start your X session, not .xinitrc. My .xsession makes sure the existing plan9port apps really exited (useful if you just logged out of an X session) and then runs factotum and .xinitrc: $ cat $HOME/.xsession killall -9 factotum plumber devdraw auxstats 9pserve stats 9 factotum -n xterm -e 'aescbc -d < $HOME/lib/secstore.aes | 9p write -l factotum/ctl' eval `9 ssh-agent -e` . .xinitrc $ When run this way, .profile never runs, so the first instance of bash in each new 9term sees an empty $PLAN9 during .bashrc and invokes .profile manually (the odd line above). I suppose I might get away with running .profile in .xsession before .xinitrc, but I haven't tried that, and this is working well enough for now that I'm not going to mess with it. All of this is subtle and quick to anger. All the man pages I mentioned are plan9port man pages. They are on the web at http://swtch.com/plan9port/man/. Russ