A fast, keyboard-driven window switcher for EVE Online on Linux. Quickly cycle between your EVE clients using configurable hotkeys, with support for multiple cycling-groups and automatic character discovery.
- Global hotkeys - Switch windows with the press of a button / hotkey, even from inside EVE
- Multiple cycle groups - Organize characters by activity (mining, PvP, trading, etc.)
- Auto-discovery - New characters can be automatically added to configured "catchall" groups
- Character select cycling - Separate hotkeys for character selection screen cycling
- Persistent configuration - Character order and groups are saved and can be customized
- System tray integration - Quick access to toggle the switcher on/off, to save and reload the config, and to quit with and without saving the config
- Hot-Reload - Being able to reload the config / reorder the cycle list while the app is running is a thing that I missed so much in Eve-O-Preview that I started this project.
- Context-aware - Remembers your position in each cycle group. Continues to cycle from the currently active client even if you manually switch to another client via the task bar
- X11 display server - Wayland is not supported
- System tray - KDE Plasma, GNOME (with AppIndicator extension), XFCE, etc.
Build and install locally:
sudo apt install flatpak flatpak-builder
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gnome.Platform//48 org.gnome.Sdk//48
git clone --recurse-submodules https://github.com/Motrotz/eveswitcher.git
cd eveswitcher/flatpak
flatpak-builder --user --install --force-clean build-dir io.github.motrotz.eveswitcher.yml
flatpak run io.github.motrotz.eveswitcherNot yet possible
Note: A Flathub release is planned once more features are added, since a pure tray applet is not permitted on Flathub.
Requirements:
- Python 3.10 or newer
- X11 (Wayland not supported)
- PyGObject and AppIndicator libraries for system tray
Build a single executable:
sudo apt install python3-gi python3-venv libappindicator3-1
git clone https://github.com/Motrotz/eveswitcher.git
cd eveswitcher
python3 -m venv --system-site-packages venv
source venv/bin/activate
pip install pyinstaller
pyinstaller --onefile --add-data "assets:assets" eveswitcher/__main__.py --name eveswitcher
./dist/eveswitcherRun directly from source:
sudo apt install python3-gi python3-venv libappindicator3-1
git clone https://github.com/Motrotz/eveswitcher.git
cd eveswitcher
python3 -m venv --system-site-packages venv
source venv/bin/activate
pip install -e .
eveswitcher
# or: python -m eveswitcher- Launch EVE Switcher - it will run in your system tray
- Log in to your EVE clients
- Use the default hotkeys to cycle between windows:
- F13 / F14: Cycle forward/backward through logged-in clients
- Ctrl+F13 / Ctrl+F14: Cycle forward/backward through character selection screens
- Ctrl+e: Toggle active/inactive state
The first time you run EVE Switcher, a default configuration file will be created at ~/.config/eveswitcher/config.json.
EVE Switcher looks for config.json in the following order:
- Portable mode:
config.jsonin the same directory as the executable - User config:
~/.config/eveswitcher/config.json
If no config file is found, a default one is created at ~/.config/eveswitcher/config.json.
Edit your config file to customize your setup.
{
"EveSwitcher": "v1",
"defaultState": "active",
"toggleStateKey": "Ctrl+e",
"CharacterSelection": {
"cycle_next": "Ctrl+F13",
"cycle_prev": "Ctrl+F14"
},
"default": {
"autoAdd": true,
"cycle_next": "F13",
"cycle_prev": "F14",
"characters": [],
"excludeCharacters": []
}
}Create separate cycle groups for different activities:
{
"EveSwitcher": "v1",
"defaultState": "active",
"toggleStateKey": "Ctrl+e",
"CharacterSelection": {
"cycle_next": "Ctrl+F13",
"cycle_prev": "Ctrl+F14"
},
"mining": {
"autoAdd": false,
"cycle_next": "F13",
"cycle_prev": "F14",
"characters": ["Miner One", "Miner Two", "Miner Three"],
"excludeCharacters": []
},
"pvp": {
"autoAdd": false,
"cycle_next": "F17",
"cycle_prev": "F18",
"characters": ["Main PvP", "Scout Alt"],
"excludeCharacters": []
}
}Global Settings
defaultState: Initial state on startup -"active"(default) or"inactive"toggleStateKey: Hotkey to toggle active/inactive state (default:Ctrl+e)
CharacterSelection
cycle_next/cycle_prev: Hotkeys for cycling through character selection screensincludeLauncher: Iftrue, include the EVE Launcher in character selection cycling (default:false)
Groups (e.g., "mining", "pvp", "default")
autoAdd: Iftrue, all characters not inexcludeCharactersare automatically addedcycle_next: Hotkey to cycle forward (optional, omit or set tonullto disable)cycle_prev: Hotkey to cycle backward (optional, omit or set tonullto disable)characters: List of character names in the order you want to cycle through themexcludeCharacters: Characters to exclude from this group (only used ifautoAddistrue)
Groups without keybindings can be used as a "catchall" to collect character names via auto-add for easy copy/paste into other groups.
"newAlts": {
"autoAdd": true,
"characters": [], // New characters will appear here after saving the config.
"excludeCharacters": []
}Use any valid X11 keysym name, optionally with modifiers:
Basic keys:
- Function keys:
F1,F2, ...F24 - Letters:
a,b, ...z - Numbers
0-9 - Special keys:
space,Return,Tab,Escape,BackSpace, etc.
Modifiers: Ctrl, Control, Shift, Alt, Super, Win, Meta
Examples:
F13,Tab,spaceCtrl+Tab,Shift+F13,Alt+aCtrl+Shift+Tab(multiple modifiers)
Notes:
- Key combinations already grabbed by your window manager (or another program grabbing keys globally) cannot be used (e.g.,
Alt+Tab). Function keysF13-F24are usually safe. - Combinations of two regular keys (e.g.,
q+w) are not supported. - Left/right modifier distinction is not supported.
Ctrlmatches both Left Ctrl and Right Ctrl (same forShift,Alt,Super). - While some legacy keyboards supported up to F35 (see historical scan codes), modern USB HID keyboards only define F1-F24. EVE Switcher supports F1-F24. (Yes, I also learned about those keyboards today, while doing research on keysym...)
The tray icon indicates the current state:
- Green icon - Active: hotkeys are being processed
- Blue icon - Inactive: hotkeys are ignored
Right-click the tray icon to access:
- Activate/Deactivate - Toggle hotkey processing on/off
- Save Config - Manually save character additions to disk
- Reload Config - Reload configuration from disk and rescan windows
- Edit Config - Open the config file in your default text editor
- Quit (Save) - Exit and save any auto-added characters
- Quit (No Save) - Exit without saving changes
EVE Switcher detects EVE Online windows by their title:
- Logged-in clients: Titles starting with "EVE - " (e.g., "EVE - Character Name")
- Character selection screens: Titles exactly matching "EVE"
- EVE Launcher: The launcher is omitted by default, but it can be included in the character selection cycling by adding
"includeLauncher": trueto theCharacterSelectionsection
When you log in a character:
- EVE Switcher detects the window title change
- If a group has
autoAdd: true, the character is automatically added - The character is appended to the group's
characterslist - Press the configured hotkey to cycle to that character
- Check that your keys aren't already bound to other actions
- Try different function keys (F13-F24 are usually safe)
- Verify your key names are valid X11 keysym names
- Ensure your desktop environment supports system trays
- For GNOME: Install "AppIndicator and KStatusNotifierItem Support" extension
- Verify
autoAdd: truein your group config - Ensure the character name isn't in
excludeCharacters - Click "Reload Config" in the tray menu after logging in
EVE Switcher logs information to help with debugging. Before using this application, please understand what data is stored (locally on your machine) and decide if this is OK with you.
EVE Switcher writes a log file to:
- Standard install:
~/.local/share/eveswitcher/eveswitcher.log - Flatpak install:
~/.var/app/io.github.motrotz.eveswitcher/data/eveswitcher.log
This log file may contain:
- Character names from your EVE window titles (e.g., "EVE - YourCharacter")
- GTK system messages
- Error messages if something goes wrong
The log file grows over time and is not automatically cleared.
If you have characters whose identity you want to keep private (such as spy alts, ISD volunteers, or accounts you don't want linked to your main), be aware that:
- Anyone with access to your user account can read this log file
- The log persists across sessions, building a history of all characters you've played
- If your system is compromised or shared, this information could be exposed
- Periodically delete the log file if you're concerned about historical data
- Be aware of who has access to your home directory
- If strict privacy is required, consider whether this tool is appropriate for your use case
The config file at ~/.config/eveswitcher/config.json contains your character names and is created with your system's default file permissions. On most Linux systems this means only your user can read it, but if you've changed your umask or use a shared system, verify the permissions are appropriate.
In portable mode (PyInstaller binary with config.json in the same directory), the config file is stored alongside the application. If you run EVE Switcher from a USB drive or shared folder, anyone with access to that location can read your config file and see your character names.
Pull requests are welcome! If you'd like to contribute:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
For larger changes, consider opening an issue first to discuss the approach.
If you encounter a bug, please open an issue at https://github.com/motrotz/eveswitcher/issues
To help diagnose the problem, please include:
- What you were doing when the bug occurred
- What you expected to happen
- What actually happened
- Your desktop environment (KDE, GNOME, XFCE, etc.)
- How you installed EVE Switcher (Flatpak, PyInstaller, source)
- Relevant log output from
~/.local/share/eveswitcher/eveswitcher.log(or the Flatpak equivalent)
Note: The log file contains your character names. If you're sharing logs publicly, redact any names you want to keep private.
WTFPL