[[!meta title="Using Zephyr (a.k.a. Zephyr For Dummies)"]]
## Introduction to Zephyr
Zephyr was a system designed to let system administrators send
important messages to users in an easily noticeable format. It was
meant to have a low volume of traffic and be used only for official
notices. This is obviously not what Zephyr is today. It can still be
used in the way it was intended: notice that you get official
zephyrgrams as you log in, with important information about Athena
services and planned outages. However, the most common usage is by
average users exchanging information about classes, how their days are
going, and talking on Zephyr classes and instances about everything
from the latest episode of Battlestar Galactica to the next 18.03
problem set. The usage of Zephyr has far exceeded original
expectations. Over time, people have also created programs that give
Zephyr a graphical interface, and programs that give zephyr a purely
textual interface, that can be used entirely within a ssh
terminal. Some of these zephyr clients have become so widely used that
there are users who do not know that there are other ways to send (and
receive) zephyrgrams. This wiki will cover the traditional commands,
typed at the athena% prompt, as well as the more common modern zephyr
client Barnowl.
The information in this wiki about Barnowl just barely touches the
surface. More for in-depth functionality, visit the [Barnowl
wiki](https://barnowl.scripts.mit.edu:444/wiki).
## Modern Zephyr
Today the majority of Zephyr users use the barnowl client. There are
other clients as well (for example, Pidgin supports Zephyr). The
following sections will go into detail about how to install, use, and
customize barnowl.
### Other Clients
There are other clients besides Barnowl, however their use is not
nearly as widespread. Some of these include:
* Owl (unmaintained, Barnowl evolved from this)
* vt / jervt
* zwgc (see TraditionalZephyr)
* Pidgin
* zephyr-mode for emacs
Using Barnowl is recommended, as it is better supported and more
documentation exists for it.
### Using Barnowl
To start barnowl, run the command `add barnowl; barnowl` at the prompt
on any Athena machine or dialup, such as linerva.mit.edu.
The simplest use of Zephyr is to send personal zephyrs to other
users. To send a zephyr, type `:` to bring up a command line, and run
the command `zwrite USERNAME`. You can also start a `zwrite` command
by simply typing z.
You can then enter your message, and then enter a `.` on a line by
itself to finish the zephyr. By convention, zephyrs are usually
word-wrapped to 70-character lines or so; Pressing M-q (Alt-q, or
Escape then q) will word-wrap the text you've entered for you.
Once you've sent and received zephyrs, you can navigate the message
list with the arrow keys. Press `d` to mark a message as deleted, `u`
to undelete it, and `x` to expunge all messages that have been marked
as deleted.
Instead of entering a `zwrite` command manually, you can also select a
message in the message list with the arrow keys, and reply to it using
`r`, which will automatically set up an appropriate `zwrite` command.
For more documentation on the built-in commands and keybindings, you
can press h to bring up barnowl's built-in help screen. For help with
a specific command, bring up a command line with `:` and then type
`help COMMAND`.
### Classes and Instances
Generally the most interesting discussion on Zephyr, however, happens
on so-called Zephyr classes. A class is a bit like a chat
room in other IM systems. Anyone can send a zephyr to a class, and
anyone who is subscribed to that class will receive it. There is no
security on classes -- anyone who knows the name of a class can
subscribe, and there is no way to determine who is subscribed to a
given class.
To subscribe to a class, use the subscribe command:
:subscribe CLASSNAME * *
To send a zephyr to a class, use the zwrite command with the -c option:
:zwrite -c CLASSNAME
Zephyrs to classes usually have an instance attached. An instance is a
short “topic” or “subject” that indicates the
context of a zephyr. Different instances are often used to multiplex
multiple conversations on a high-traffic class. You can specify an
instance with the -i option to zwrite:
:zwrite -c CLASSNAME -i INSTANCE
A message without an instance specified will default to the instance
“personal”.
Some common classes include:
help:
> -c help is a class for asking (and answering) questions on virtually
> any topic imaginable. Be sure to use an instance (such as
> “linux”, “barnowl”, “campus”, or
> so on) when asking questions, since it's a fairly high-traffic
> class.
sipb:
> -c sipb is where most SIPB members hang out. It's a place for
> technical discussion, questions, support, and organizing SIPB events
> or projects. You should also always use an instance when sending to
> -c sipb.
Personal Classes:
> By convention, nearly every Zephyr user has a "personal" class that
> is the same as their username. How this class is used varies from
> person to person, but it's often a sort of mini-blog, a place to
> report what one is working on or up to, or ask friends questions, or
> just rant about something.
"un" Classes:
> Many people use "un" classes in addition to their personal class,
> for example `johndoe` might use `-c unjohndoe`. Sometimes there are
> nested un-classes as well, such as `-c ununjohndoe` or `-c
> unununjohndoe`. It is extremely rare to see anything more than
> three "un"s. Un-classes are generally used for snarking about a
> conversation going on in the next class up (`-c unjohndoe` snarking
> about `-c johndoe`), or for more intense ranting. The more "un"s,
> the more intense the snarking/ranting generally becomes.
### Zephyr Slang
If you spend enough time on Zephyr, you'll begin noticing some strange
phrases and words being thrown around. Some of these include:
i,i foo:
> picked up from CMU zephyrland and means "I have no point here, I
> just like saying:". Sometimes people simply use quotes: `"foo"`.
mix:
> If somebody accidentally sends a Zephyr to the wrong class or
> person, they will send another Zephyr to that wrong/class person
> simply saying "mix". This basically just means, "oops, sorry, I
> didn't mean to send that Zephyr here". You might also see "-i mix",
> which is the same thing, only with instances.
.d:
> You may see an instance change from `-i foo` to `-i foo.d`. This
> indicates a deviation or tangent from the the original topic.
starking:
> Answering a question or replying to a topic to a topic several hours
> (or days, occasionally) later. The term originates from Greg Stark,
> who would often reply to zephyrs hours or occasionally days later
> without seeing if anyone had answered yet, or worse, if the instance
> had moved on to an entirely different topic.
ttants:
> Literally, "Things That Are Not The Same".
prnf:
> Literally, "Pseudo-Random Neuron Firings".
There are many other acronyms that are used; if you don't know what it
means, try using the `whats foo` command at an Athena terminal. If you
don't have the command, run `add sipb` first.
### Startup
There might be some options that you want to be consistent from
session to session; you don't want to have to set the same variables
each time. You can fix this by adding the commands to your "startup"
file, for example, `.owl/startup`. This can be done from within
Barnowl, by using the `startup` command:
:startup set foo bar
Where `foo` is the variable you want to set, and `bar` is the value.
You do not necessarily have to use the `set` command, either, any
command you can type in Barnowl can be added to the startup file.
### Logging
It is handy to be able to log your conversations so you can refer back
to them later. To log classes, for example:
:set classlogging on
And to log personals:
:set logging on
This will log to the "zlog" directory in your locker. You probably
don't want people to see what classes you're on or what people you
talk to, so you can run the Athena command
mkdir -p ~/zlog
fs sa ~/zlog system:anyuser none
to make this directory completely hidden.
### Colors
By default, there are seven colors you may use in the terminal: red,
green, yellow, blue, magenta, cyan, and white. In order to use color
in Zephyr, you can use the following notation: `@(@color(red)This is
some red text))`
Colors may vary from machine to machine, as different terminal
profiles may have different shades of the seven colors.
### Filters
Some people like to customize their Barnowl by color-coding classes.
This makes it easier to tell different classes apart (and minimize
mixing). Barnowl has some already existing filters, for example,
`personal` (for incoming personals), `out` (for outgoing personals),
and `ping` (for pings). To assign a color to a filter, add the
following to your startup file:
filter personal -c green
What if you want to color-code your class, or a friends class? You
can create and color filters with:
filter johndoe class johndoe
filter johndoe -c blue
You can update your settings and filters without restarting your
Barnowl session by:
:source ~/path/to/config/file
You can see all the filters by using `:show filters`, and narrow to a
particular filter with, e.g., `:view personal`. You can use `:view
all` or the keyboard shortcut `V` to see all messages again.
For more detailed information on filters, visit
https://barnowl.scripts.mit.edu:444/wiki/Filters.
## Running Barnowl in Screen
It can be very annoying to have to close Barnowl when you turn off
your computer. During the time your computer is off, you're missing
many (possibly important) zephyrs. It can be aggravating to be using
zephyr via an unreliable network connection. It can also be
frustrating if you leave your computer on with Zephyr up, but go to a
different computer and want to check your zephyrs - how do you do
this? These problems can be solved with the magic of screen.
A more detailed and extensive explanation of this can be found at
http://web.mit.edu/kchen/bin/owl-screen.txt.
### Screen
You should find a computer or server on which to run your screen
session(s) that is up all the time, for example, linerva.mit.edu.
Screen allows you to run programs inside of it on one computer, and to
access those same programs from other computers via ssh.
### Quickstart
1. Pick a machine to host your screen session on.
If you don't know of any options, linux.mit.edu (Linerva) is a good choice.
2. ssh to that machine.
3. Run "add kchen". You may want to add this to your `~/.environment` file.
4. Run "owl-screen"
Your screen session is now ready. Once you start the screen session,
you'll need to get renewable Kerberos tickets in order to run it for
any extended period of time. Press C-a C-c to open a new screen
window, and run
kinit -l7d -54
(length 7 days, both Kerberos 5 and Kerberos 4). Press C-a 0 to return
back to your Barnowl window.
When you're ready to log out, press C-a d to "detach" your screen, and
then type `exit` or `logout` to log out. Later, when you want to
"reattach" your screen, ssh to the machine again, and run `screen -r`.
### Kerberos Tickets and AFS Tokens
In order to keep your screen session authenticated, you'll need to
keep your Kerberos tickets and AFS tokens up-to-date. There is a
script that will do this for you, located in the `kchen` locker.
After you ssh into the machine that hosts your screen sessions, run
the following commands:
add kchen
owl-screen
C-a C-c
kinit -l1d -r7d -54
### Attaching and Detaching Sessions
To detach a screen session (for example, if you want to log out),
press C-a d (Control-A, then D). Screen continues to run, but is no
longer active.
To reattach a screen session, possibly detaching from wherever it's
currently attached, run:
screen -dr
`screen` can do a whole lot more. To find out about it, see
[UsingScreen](https://sipb-www.scripts.mit.edu:444/doc/wiki/UsingScreen).