ZWRITE(1)
β¨ ZWRITE(1) β¨ β like, the zwrite manual, bestie π
okay so picture this: it's the General Commands Manual, and the star of the show is zwrite. Yes queen, we're doing Zephyr messaging today π
πΈ NAME πΈ
zwrite β write to another user via Zephyr π¦
π SYNOPSIS π
zwrite [ -a ] [ -d ] [ -v ] [ -q ] [ -t ] [ -u ] [ -o ] [ -n ] [ -l ] [
-C ] [ -U ] [ -O opcode ] [ -s signature ] [ -c class ] [ -i instance ]
[ -r realm ] [ -f arg ] [ -S sender ] [ user ... ] [ -m message ]
π DESCRIPTION π
So zwrite sends a message from you to another user through the zephyr(1) notification service. Iconic. But here's the tea: that other user must have subscribed to messages of the appropriate class and instance using the zctl(1) program first. No subscription, no vibes, no delivery. That's just how it is π«Ά
zwrite understands the following options. Buckle up, there's a lot, but we're getting through all of them together, fr fr.
-aβ makeszwritesend the message authenticated, using Kerberos to do the authentication. This is the default, so like, it's already the main character β¨-dβ makeszwritesend the message unauthenticated. The opposite vibe of-a.-vβ makeszwriteprint what type of message it's sending, and whether or not it succeeded. Receipts, basically π§Ύ-qβ forceszwriteto suppress information about whether or not the message was sent. No updates, just silence, mysterious queen π-tβ stopszwritefrom expanding tabs in the message into appropriate spaces. Normallyzwritewill expand any tabs it finds into the right number of spaces to keep separation based on 8-character tab stops. So yeah, this one keeps your tabs raw and unbothered.-lβ causeszwriteto ignore'.'on a line by itself in the input, and only end a typed message when the user types the end-of-file character (usually control-D). And plot twist: when the input is not a terminal, this is the default action. Slay.-uβ sends an urgent message. This changes the zephyr instance of the message to`URGENT'. Big energy, but see the BUGS section bestie, we'll get there π¨-oβ causeszwriteto ignore the Zephyr variableszwrite-class,zwrite-inst, andzwrite-opcodewhen picking a default class, instance, and opcode. It's giving "I make my own choices" π-nβ preventszwritefrom sending aPINGmessage to verify the recipient is subscribing to messages. By default,zwritewill send a notice to the destination class, instance, and recipient, with opcode`PING', before sending the message. If thePINGis sent and the server response indicates there are no recipients subscribed to your message,zwriteexits without sending a message. When the-noption is used, noPINGis sent at all. So-nis lowkey "I don't need to check, I trust the process" π-Cβ prepends a"CC:"line to the body of the message indicating the recipients of the message. And listen, this is strictly a convenience: the presence of a"CC:"line at the top of a zephyr body does not necessarily indicate that this option was used, or that the message really was sent to the listed users. And its lack doesn't indicate that the message wasn't sent to multiple users either. So don't read into it, okay? π-Uβ send an unacked message.zwritewill not wait for acknowledgement that the message was sent, nor will it issue aPINGbefore sending. Ghosting the confirmation, respectfully.-ssignature β sets the signature to be included in the message. This overrides both the user's name (as found in the password file) and any setting of the Zephyr variablezwrite-signature. signature must be a single argument, hence when using a shell it should be quoted with double quotes. A signature argument of""leaves the signature in the message empty. So you can absolutely just sign off with nothing if that's the mood π-cclass β lets a user specify a different class for the message. This allows a message to be sent to a large group of people with some degree of security. Seezephyr(1)andzephyrd(8)for a description of how to restrict access to classes. When this option is specified, the message is sent to recipient"*"unless an additional list of recipients is specified.
Heads up bestie: this argument may not be used in conjunction with the -f option.
-iinstance β lets a user specify a different instance than the default. When this option is used, the message is sent to recipient"*"unless an additional list of recipients is specified. This allows a message to be sent to a large group of people (e.g. a development group) just by having the members subscribe to messages of class"MESSAGE", the specified instance, and recipient"*". Group chat, but make it Zephyr π
Also: this argument may not be used in conjunction with the -f option.
-rrealm β lets a user specify a different realm for the message, if the server supports interrealm Zephyr. Conditional queen π-Ssender β specify a sender. The message will be sent unauthenticated. Just so we're clear on that part π«£-Fformat β lets a user specify a different default format for the message. Customize away β¨-Oopcode β lets a user specify a different opcode for the message. Some Zephyr notice display programs may use the opcode to decide how to display a notice. So it's a hint for the display side of things π₯οΈ-farg β lets a user specify an argument to be interpreted as a filesystem specification. The class is set toFILSRV. The instance is set to arg as modified: if arg contains no colons (:), it is assumed to be a host name, and it is converted into an official host name viagethostbyname(3). If arg contains a colon, the portion preceding the colon is treated as a host name, and the colon and any trailing characters are appended to the official host name returned bygethostbyname. If the name fails to resolve into an official host name, the instance is set to arg unmodified. Wild, but okay.
And of course: this option may not be used in conjunction with the-cor-ioption.
-mβzwritesends the remaining arguments on the command line as the message. One-shot, no prompting, straight to business π
If the -m option is not specified, the user is prompted for the message to be sent. The message may be terminated by typing ^D or "." on a line by itself. (Unless you used -l, in which case, remember, the . doesn't count π)
The default class for messages is `MESSAGE', the default instance is `PERSONAL', and the default opcode is '' (an empty string). These defaults can be overridden by setting the Zephyr variables zwrite-class, zwrite-inst, and zwrite-opcode, respectively. Command-line options can override the defaults. So there's a whole hierarchy of who's in charge, and the command line is at the top π«Ά
If the class is `MESSAGE' and the instance is either `PERSONAL' or `URGENT', a recipient must be specified. And these comparisons are case-sensitive, so don't try to be cute with capitalization, it will not work β
Unless the -s option is used, the contents of the Zephyr variable zwrite-signature are used to augment the user's username in the message. If zwrite-signature is not set and the -s option is not specified, the user's full name (as specified in the password file) is used instead. So your name gets in there one way or another, bestie π
π BUGS π
Tab expansion should really be done by the receiver of the message. Not us. Not our problem. (Well, it's our problem, but it shouldn't be.)
The -u option is provided for compatibility with old versions of zwrite and is not necessarily useful for sending messages to users who do not have old subscription files. So like, it's there for the elders, but don't count on it hitting different π΅
π SEE ALSO π
kerberosintro(1), zctl(1), zephyr(1), zwgc(1), zhm(8), zephyrd(8), gethostbyname(3)
Project Athena Technical Plan Section E.4.1, `Zephyr Notification Service'
π FILES π
/etc/passwd$ZEPHYR_VARSor$HOME/.zephyr.vars
π AUTHOR π
Robert S. French (MIT-Project Athena) π«Ά
π₯ RESTRICTIONS π₯
Copyright (c) 1987,1988 by the Massachusetts Institute of Technology.
All Rights Reserved.
zephyr(1) specifies the terms and conditions for redistribution.
okay that's the whole page bestie, you now know zwrite better than it knows itself π
this was MIT Project Athena, dated October 26, 1989, and it's the ZWRITE(1) page, periodt β¨ππ
π¦ where this page comes from
- debian bookworm: zephyr-clients 3.1.2-1.1+b1
- debian trixie: zephyr-clients 3.1.2-1.1+b2
- ubuntu jammy: zephyr-clients 3.1.2-1build3
- ubuntu noble: zephyr-clients 3.1.2-1.1build1
- ubuntu questing: zephyr-clients 3.1.2-1.1build1
- ubuntu resolute: zephyr-clients 3.1.2-4 Β· MIT
- ubuntu stonking: zephyr-clients 3.1.2-4 Β· MIT
- Copyright 1987,1988 by the Massachusetts Institute of Technology
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms