This is a graphical (GTK) utility for Linux that lives in the tray as an app indicator, watches a configured ical calendar file URL and will notify shortly before a meeting begins. It allows you to directly open any (Zoom) embedded meeting URL with a single click from either the popup menu or the notification.
- Clone repo
cargo b
You can drop the meeters binary anywhere. The tarball includes a few (optional) icons that will be used when they are located next to the meeters binary. If not the program will default to a "new appointment" icon.
meeters can be configured using environment variables, or a configuration file or a mix of both.
When using a file meeters expects a configuration file called meeters_config.env in a directory called meeters in your Linux standard config location. This will typically be: ~/.config/meeters/meeters_config.env
The file should have name/value pairs separated by equals signs. For example:
MEETERS_ICAL_URL=http://example.com/calendar.ics
For an on-prem Exchange calendar via EWS:
MEETERS_CALENDAR_SOURCE=ews
MEETERS_EWS_URL=https://mail.example.com/EWS/Exchange.asmx
[email protected]
When using EWS, meeters asks for the Exchange password in the UI on first refresh and stores it in the desktop keyring/wallet. EWS requests use Basic auth over HTTPS.
The EWS password is stored through the FreeDesktop Secret Service API, which is typically backed by GNOME Keyring, KDE Wallet, or a compatible provider such as KeePassXC. The keyring service name is:
net.aggregat4.meeters.exchange
The entry user is the configured MEETERS_EWS_USER. On KDE, inspect or delete the entry with
KWalletManager. If secret-tool is installed, the stored password can also be checked with:
secret-tool lookup service net.aggregat4.meeters.exchange username [email protected]The following properties are supported:
| Property | Required | Default Value | Description |
|---|---|---|---|
| MEETERS_CALENDAR_SOURCE | no | ics | Calendar source to use. Supported values: ics and ews. |
| MEETERS_ICAL_URL | yes for ics |
- | The HTTP URL to your ical calendar |
| MEETERS_EWS_URL | yes for ews |
- | The direct Exchange Web Services endpoint, typically ending in /EWS/Exchange.asmx. |
| MEETERS_EWS_USER | yes for ews |
- | The Exchange user in email form, for example [email protected]. |
| MEETERS_LOCAL_TIMEZONE | no | Europe/Berlin | The local timezone where all times will be converted to. Make sure you set this to a valid IANA timezone identifier if you are not in the default timezone |
| MEETERS_EVENT_NOTIFICATION | no | true | Whether or not an upcoming event should be announced with a sticky notification ("true" or "false") |
| MEETERS_POLLING_INTERVAL_MS | no | 120000 | The time in milliseconds between two fetches of the ical calendar. |
| MEETERS_EVENT_WARNING_TIME_SECONDS | no | 60 | The time in seconds before the next meeting to show the notification. |
| MEETERS_FUTURE_DAYS | no | 1 | The number of future days to show in the calendar view in addition to today. For example, a value of 1 shows today and tomorrow, 2 shows today plus two more days, etc. |
| MEETERS_TODAY_START_HOUR | no | 8 | The start hour of the timeline view (0-23). Events before this hour will not be visible in the timeline. |
| MEETERS_TODAY_END_HOUR | no | 20 | The end hour of the timeline view (0-23). Events after this hour will not be visible in the timeline. |
| MEETERS_USE_ZOOMMTG | no | false | If set to true, Zoom meeting URLs will be opened with zoommtg:// instead of https://. |
| MEETERS_LOG | no | warn | Controls stderr log verbosity. Supported values: off, error, warn, info, debug/verbose, and trace. |
meeters exposes a D-Bus interface that allows you to control the window state programmatically. The service name is net.aggregat4.Meeters and the object path is /net/aggregat4/Meeters.
Opens the meetings window if it's closed or creates it if it doesn't exist.
dbus-send --session --dest=net.aggregat4.Meeters --type=method_call /net/aggregat4/Meeters net.aggregat4.Meeters.ShowWindowHides the meetings window if it's open.
dbus-send --session --dest=net.aggregat4.Meeters --type=method_call /net/aggregat4/Meeters net.aggregat4.Meeters.CloseWindowToggles the window state - opens it if it's closed or closes it if it's open.
dbus-send --session --dest=net.aggregat4.Meeters --type=method_call /net/aggregat4/Meeters net.aggregat4.Meeters.ToggleWindow| Error | Solution |
|---|---|
thread 'main' panicked at 'Failed to load ayatana-appindicator3 or appindicator3 dynamic library' |
Install the required appindicator library. On Arch Linux, run: sudo pacman -S libappindicator-gtk3 |