Desktop in a shell
People are using computers, everywhere, really! ;)
As you might guess correctly, so do I.
Basically, I am using three computers: my laptop (ThinkPad X201s, awesome machine, but pabs told me not to post any more adverts for ThinkPads on Planet Debian *g*), my smartphone (Motorola Milestone, yes, that counts as a computer) and "random_pc" (for random as in my girlfriends or some other trusted (!!!) friends computer).
My laptop is running Debian GNU/Linux unstable with Xfce4.6, my smartphone is running Android 2.2.1 Froyo, my girlfriend has Ubuntu with GNOME, a friend runs Debian unstable with GNOME, another one Arch Linux with KDE4 and so on. And on all these machines I want be able to work, which means I have to read mail and rss, chat via IRC, JabberXMPP and ICQ, have a look at my to-do list, ssh into different machines, write some code, tweet and dent etc.
In the following series of posts I will describe how I can handle about 90% of my work on every (trusted) computer out there, using ssh, screen, mutt, irssi, BitlBee, newsbeuter etc.
As I am describing the setup as a "Desktop in a shell", let's start with a login- and desktop/window-manager: ssh+screen.
ssh
Obviously, you need a machine to ssh into it, where the "Desktop" will live on. For me, that's my home router/fileserver/vm-serverdorei
, running Debian GNU/Linux screen
After logging in, I start my "window-manager" withscreen -rd
, -r
for reattach a running screen session, -d
for detach it if it is already attached somewhere else. Or I can start a new session by just typing screen
. Inside the screen I have multiple windows (one can create new ones with ^A c
) with all the needed software running. I can switch windows by pressing ^A N
, N being the number of the window, ^A n
for the next window, ^A p
for the previous one or ^A ^a
for the last one. Or I can get a window-list with ^A w
. If needed, I can rename windows with ^A A
, followed by the new name. That should be enough for almost everyone. Let's just add a window-list to the bottom (as you might have seen on GNOME, Xfce, KDE and even Windows ;) by adding the following to the ~/.screenrc
:
caption always " " # clear line before hardstatus hardstatus alwayslastline "%{= kb}[ %{B}%H:$USER %{b}][ %=%{w}%?%-Lw%?%{b}(%{W}%n*%f %t%?(%u)%?%{b})%{w}%?%+Lw%?%?%= %{b}][%{B} %l %{B}%{W}%d.%0m %{b}]"You get the current host- and username, the machine load and the date for free ;) Even if it is possible, I do not have any "autostart" like stuff in my
.screenrc
as the machine is running stable and I start the screen and the apps inside maybe once a year after a reboot.
screenrc
My.screenrc
looks like this:
# detach on hangup autodetach on # don't display the copyright page startup_message off # set scrollback to 2000 lines, default 100 defscrollback 2000 # set silencewait to 15 seconds, default 30 silencewait 15 # new shells should be started as login-shells shell -$SHELL # make a fancy statusline caption always " " # clear line before hardstatus hardstatus alwayslastline "%{= kb}[ %{B}%H:$USER %{b}][ %=%{w}%?%-Lw%?%{b}(%{W}%n*%f %t%?(%u)%?%{b})%{w}%?%+Lw%?%?%= %{b}][%{B} %l %{B}%{W}%d.%0m %{b}]" # make higlighting bold, black on blue background sorendition +b bk # some fixes, no I do not know where they come from :) termcap xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l termcapinfo xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l termcapinfo xterm* OL=100 termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l' termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~' termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~' termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007' termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l' termcapinfo xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337' termcapinfo xterm* be termcapinfo xterm|xterms|xs ti@:te=\E[2J termcapinfo wy75-42 xo:hs@ termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J termcapinfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@' termcap vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC termcapinfo linux C8 # some bindings bind k bind ^k bind . bind ^\ bind \\ bind ^h bind h bind 'w' windowlist -b bind 'W' windows bind 'K' kill bind 'I' login on bind 'O' login off bind '}' history bind = resize = bind + resize +3 bind - resize -3 # Mutt demands this # http://wiki.mutt.org/?MuttFaq/Appearance defbce on term screen-bceThat's all for my screen setup. The obvious, boring screenshot follows: See you next time, when I will present my mutt setup here.
Comments
Interesting, thanks. I am looking forward to the next posts of this serie.
Very interesting post. I have considered using screen but ran into some issue with the way Vim behaved so I’ve kept it on the back burner. I am looking forward to your post.
One question, are you running your initial screen session from a terminal emulator or the console? I am running XFCE4 on my Sid box which I log into to read my mail remotely with its terminal emulator. I know little about the terminfo settings in your screenrc so I don’t know if they will conflict in some way with XFCE4′s terminal.
Thanks!
I rarely use Vim, so no issues with that here :)
The initial session is usually started from my laptop via ssh using Xfce4 and it’s xfce4-terminal. So no conflicts here. And I must admit I have no clue what the terminfo stuff does, as my screenrc is based on some friends and these lines were just copied over.
I tried screen on my desktop and while I like your changes, there are still two issues that may keep me from using it. First is that I get no audible bell, i.e. PC speaker beep from within screen. Second is that attempting to navigate by word in Vim using Ctl-arrow results in some weird text manipulation. I was hurriedly replying to a message on Debian User so I didn’t investigate further.
Typically, I only use Mutt, or Midnight Commander, or Bash aliases on my remote login sessions so it isn’t critical that I keep a program running. That said, since switching Mutt to Maildir it does not seem to mind much if I leave the one on the desktop running and then work with mail via a remote login.
What editor do you use? I’m always looking for Mutt tips so your next post should be interesting.
Yeah, Ctrl-Arrow eats lines here too. With and without my .screenrc. No idea why.
And no idea about audible bell either, I do not like that feature anyways :)
Editor? nano with text highlighting and stuff. And geany on the “real” desktop.
Hi, nice post.
I’ve this in my shell rc, so I don’t need to launch screen:
[ -n "$SSH_CONNECTION" ] && \
[ "x$TERM" != 'xscreen' ] && \
screen -dR
Greetings.
This looks cool, but does not perfectly match my usecase, as I sometimes connect to the box without wanting to open the screen.
Thanks for the tip, I bet it will be useful for someone :)
I’m one of those people too, with mutt, newsbeuter etc. on the console. And generally happy with it, but…
Right now I use calcurse as calendar, however, I’m not really satisfied with it. I took a look at remind/wyrd, and even wrote the beginnings of a conversion-script from calcurse to remind, but there is one thing that this still lacks: caldave-support.
And on a related note, a way to synchronize address-books with mutt to whatever (e.g. kaddressbook, android, maybe via webdav) would also be very useful.
So in my opinion, the “console-desktop” just isn’t here right now ;)
Did you check out byobu? It is a screen wrapper that comes with a nice set of status messages and so on – no need to write your own .screenrc ;) It was written for Ubuntu but is in the Debian repos as well (but an older version of it).
Nope, didn’t know about byobu yet. Thanks for the tip, will check it out.