Zephyr
An Overview of Zephyr
There are several hundred workstations scattered about the MIT campus. If you've ever wondered how you would find someone or send a quick message to someone or a group of people without waiting for them to read mail while they are logged in, Zephyr is the answer.
Zephyr provides a means for centralizing users' locations while they are logged in and allows fast message service (on the order of a few seconds) to one user or many users simultaneously.
When you log in, a program called zwgc (Zephyr windowgram client) is run. This program registers you with the Zephyr server(s) and remains in the background to handle incoming messages. These messages appear in the upper left of your screen in the form of windows (hence windowgram). Clicking on the window will cause it to disappear. Here are some simple examples:
> zlocate joeuser m4-082-5.MIT.EDU :0.0 Wed Apr 29 05:47:32 1992
This says that joeuser has been logged in to m4-082-5 since the indicated time. The :0.0 indicates the display he is using (see man X).
athena% zwrite joeuser Type your message now. End with control-D or a dot on a line by itself. Hi there. . joeuser: Message sent
A small window with the sender's name and message appeared on his screen.
Working with Zephyr
A Zephyr subscription contains three pieces of information: Class, Instance, Recipient. In order to receive a zephyr notice you must have a subscription with the three fields matching that of the notice. By default you are subscribed to both:
<MESSAGE,PERSONAL,%ME%>
<OPERATIONS,MESSAGE,*>
The Class Field
This is the major classification of the notice. The most common Class is message. This is the class zwrite uses by default. Other classes may have restrictions on who is allowed to send or subscribe to notices.
The Instance field
This field simply serves as a label to further classify the subject of the class. If for example you had a class called 'food', a possible instance may be 'peanut-butter'. Generally, there are no restrictions on who may receive or send notices by instance within a class. The asterisk '*' wildcard may be used to indicate all instances within a class for purposes of subscribing, but not sending.
The recipient field
This field can be one of two things; a '*' or %ME%. %ME% is simply an abbreviation for your username. When this field is set, the message (or zephyrgram) can only be received by that user. You cannot subscribe to messages with recipient set to any other user but yourself.
A * indicates that the message was broadcast to many people. It serves as wild card to show that the message was intended for no one in particular.
Useful subscriptions
-c 3down: used by jhawk's 3down script, which shows changes to 3down
-c accounts: like consult, but for Athena Accounts; generally using this class is as effective as for reaching Accounts as -c consult
-c consult: someone knowledgeable is usually on this
-i consult: for Athena outages/problems (generally, for services run by ops)
-c consult-auto: for automated messages, such as [ astronut|hd:Erica's ] printer outage notification script
-c help: where people in the MIT community can ask questions
-i help: like -c help, but is an instance
-c helpdesk: for ServiceDesk consultants
-c moira: for moira outages/problems
-i network: for network outages/problems
-i printadm: zephyr printing problems and lpcng usage
-c n42: for topics related to N42
-c noc: automated monitoring of network equipment, heavy traffic class
-c noc-ilg: used by the [hd:NOC] to report outages/problems with [hd:ILG] networks
-c sipb: used by the Student Information Processing Board (and those affiliated to it
It should be noted that the network and printadm zephyr instances are low-traffic instances. Use them only when necessary. For instance, do not ask question that can be found somewhere else. If you are inquiring about a potential outage on -i network, make sure it is not already noted on 3DOWN before asking on the zephyr instance.
Login notifications
Getting Notified When Someone Logs in
To receive a zephyrgram when one of your friends logs in, he must be announcing his login and you must be able to receive it. All you have to do is create a file in your home directory and name it .anyone. In this file include a list, 1 per line, of usernames of people from whom you want to receive login notification. Then to receive these notifications, run the program znol. This program will read your .anyone file and subscribe you to the appropriate messages.
The tricky part is that the people you are interested in must set their exposure such that they allow notifications to be sent when they log in or out. This is not set by default. To do so, the person must type one of the following.
- zctl set exposure realm-announced
- zctl set exposure net-announced
- zctl set exposure net-visible
Note: net-announced and net-visible are currently the same. They will apply when sites outside of Project Athena adopt Zephyr
The difference between these two is that to receive notification from someone with realm-announced, you must pass authentication with Kerberos whereas net-announced performs no check for authentication.
See the man pages on znol and zctl for more info.
User Logged ON AT Sent Message
Occasionally, you may get a zephyrgram that reads something like this:
username unknown opcode on SENT on at
(sometimes it reads logged on at sent or something of this sort.)
This just means that the zephyr server had a timeout. It occurs when you log in at a time when the Athena zephyr servers are overloaded. It is not an unusual thing to happen, and you shouldn't be concerned by it.
Hiding From Other Users
Zephyr allows you to have various exposure levels, in other words, you control whether or not people can zlocate you. To set an exposure level you need to set a variable from within zctl (Zephyr control program). To set your exposure use
zctl set exposure <exposure level>
where the exposure level can be one of:
net-announced: anyone can zlocate you or receive notification when you log in
net-visible: anyone can zlocate you but your login is only announced to those within the Athena realm.
realm-announced: only users who have been authenticated with Kerberos can zlocate you and can receive notification when you login
realm-visible: only users who have been authenticated with Kerberos can zlocate you; your login is not announced
opstaff: only members of Athena operations staff can find you
none: no one can find you or zwrite you, and your login is not announced. This option disables Zephyr completely.
You have the option to hide during your login session without resetting your
Zephyr variables. To do this, type
zctl hide
To become visible again, type
zctl unhide
Customizations
Creating a Signature in Your Zwrite Messages
To get a signature to appear in the windowgrams you send out:
zctl set zwrite-signature Pablo Picasso
Subsequent messages will begin with:
From: Pablo Picasso
You can also add the "-s" option to zwrite, as in:
zwrite -s "Pablo Picasso" joeuser
To change the signature in Xzwrite, right-click on the xzwrite icon. Then select Change Signature.
How to Avoid Accidentally Clicking Away Zephyr Messages
By adding the following line to your .Xresources file:
zwgc*minTimeToLive: 100
you can set a minimum on the amount of time (in milliseconds) that a zephyrgram must be on the screen before it will accept mouse clicks. This means that when a zephyr message pops up on the screen any mouse clicks in the zephyr message during that period of time will not cause the zephyrgram to disappear; note that any mouse clicks during that period of time will be totally ignored and not queued.
Note: If you are unsure about X resources, and how to use them, see the answer [archive:How do I use X Resources?] under the XWINDOWS topic of our browser.
How to Display Pings From Other Users
Between the time you type your zwrite command and actually start entering the text of your message, there is something called a "ping" that gets sent to the recipient of your message. This ping is used by the sender's zwrite process to determine if the recipient is logged on.
It may be desirable to display a message when your machine receives a zephyr ping, so you know when someone is writing to you. This is easily possible, and requires a small addition to your .zwgc.desc file. If you do not have such a file, you can copy the default one into your directory by typing
cp /usr/athena/share/zephyr/zwgc.desc ~/.zwgc.desc
You then need to change the permissions on this file so that you can edit it by typing
chmod u+w ~/.zwgc.desc
In this default file, you'll see a few lines that say this:
# Opcode "ping" is used by sender programs to see if the message would # really get sent, or if the recipient has logged out. No useful # information is normally contained in these messages, so we discard them. if (upcase($opcode) == "PING") then exit endif
This tells zephyr to merely discard ping messages; to actually display a message for them, replace the last line with the following:
if (upcase($opcode) == "PING") then if (upcase($instance) == "PERSONAL") then print "Ping from "+$sender+"\n" put endif exit endif
Once you've done this, zephyr will display a notice for pings starting the next time you log in, or start a zephyr process. If you want the change to take place immediately, you can tell zephyr to reread the file you just changed by typing at the athena prompt:
zctl wg_read
NOTE: You will NOT be notified if the sender uses the "-n" option with the zwrite command, which suppresses the initial ping. For example:
zwrite -n jo
would not send out the notification.
For more example fragments like this, you can examine the directories /mit/zephyr/examples, and /mit/dotfiles/Zwgc.desc by typing:
attach zephyr cd /mit/zephyr/examples
or
attach dotfiles cd /mit/dotfiles/Zwgc.desc
New Mail Notification via Zephyr
To receive mail notifications, you will need to subscribe to the appropriate zephyr class. You do this by typing the following at your athena prompt.
zctl add mail inbox %me%
If you had subscribed with
zctl add mail \* %me%
Then you will get notifications for mail that got automatically refiled into your Spamscreen folder (if you have one) as well as your inbox. You can undo this with
zctl del mail \* %me%
Useful aliases
- alias consulton "zctl sub consult * *"
- alias consultoff "zctl unsub consult * *"
- alias zcon "zwrite -c consult"
Then you can do:
athena% consulton athena% zcon "Hi, Could someone help me out with the following printer...." <listen to responses> athena% consultoff
Customizing Your .zwgc.desc
You can control the look of the windowgrams you receive by creating a file called .zwgc.desc. You can copy the default .zwgc.desc file into your directory by doing:
cp /usr/athena/share/zephyr/zwgc.desc ~/.zwgc.desc
You then need to change the permissions on this file so that you can edit it
by typing
chmod u+w ~/.zwgc.desc
(You can find out more about the chmod command by typing man chmod.) You may then modify your .zwgc.desc as you wish. There are samples of certain modifications (saving all windowgrams to a file, filtering out certain instances, etc.) available. To get to them:
attach zephyr cd /mit/zephyr/attic/examples
To get a list of the available examples, type
ls
To view a file, type
more filename
where filename is the name of the file you're interested in. You can make the changes take effect immediately by typing
zctl wg_read
There are also some examples in the dotfiles locker. To get to those, type
attach dotfiles cd /mit/dotfiles/Zwgc.desc
Then follow the same steps as above for viewing these files.
Zephyr logs
Publicly accessible Zephyr logs
Logs of many Zephyr classes/instances can be found at /mit/zlog/ and /mit/czlog. There are also /mit/zlogs and /mit/sipbzlog. See Zephyr on Athena for instructions on sub/unsub/add/del from Zephyr instances/classes.
Logging Zephyrs
You can keep a log file containing the text of all the zephyrgrams you receive. This log file will be written into the file
/tmp/zwgc_log.${USER}
on the Athena workstation you are on, where ${USER} denotes your username (e.g. if your username is pegray then the copies will be saved in /tmp/zwgc_log.pegray).
You can find an example of how it is done by typing:
attach zephyr more /mit/zephyr/attic/examples/log_file
For more information about customizing your .zwgc.desc file please refer to the appropriate [ manual page|istcontrib:Manual Pages].
If you do create a log in the /tmp directory, you might want to delete it when you log out – otherwise it could be potentially read by other users. To do that automatically, insert the line
/bin/rm /tmp/zwgc_log.username
into your ~/.logout file. Replace username above with your username.
Further Documentation
For more info on Zephyr, see the document Zephyr on Athena, available at CopyTech (11-004) or via the On-Line Help system by typing the following at the athena prompt:
help zephyr
There are also man pages related to zephyr:
[zephyr(1)], [zwrite(1)], [zlocate(1)], [znol(1)], [zleave(1)], [zaway(1)]
For more advanced features of Zephyr see:
[zwgc(1)], [zctl(1)], [owl(1)]
For other references, see the Zephyr on Athena document.