Linux-Fassung (Ubuntu) ergaenzen
Die Fachlogik war bereits plattformneutral — paths.js loeste ~/.config schon auf, jsonl.js liest ueber os.homedir(). Zu tun waren Autostart, Build-Targets und drei Linux-Eigenheiten der Oberflaeche. XWayland erzwingen: Ab Electron 36 waehlt Chromium in einer Wayland-Sitzung von sich aus Wayland. Dort darf sich ein Fenster weder selbst positionieren noch dauerhaft in den Vordergrund legen — beides ist der Kern dieses Widgets. Der Schalter muss auf der Kommandozeile stehen, weil Ozone die Plattform vor dem Main-Skript festlegt; appendSwitch() und ELECTRON_OZONE_PLATFORM_HINT kommen beide zu spaet. Bleibt ein einmaliger Neustart mit --ozone-platform=x11, der sich am Argument selbst als Abbruchbedingung erkennt. Im AppImage muss dabei execPath auf APPIMAGE zeigen, sonst laeuft der Nachfolger in den /tmp-Einhaengepunkt, den der Vorgaenger beim Beenden wegraeumt. Autostart: app.setLoginItemSettings() gibt es unter Linux nicht. Das neue Modul autostart.js kapselt die Weiche und schreibt bzw. loescht dort ~/.config/autostart/claude-live-dashboard.desktop. Der Startbefehl kommt aus APPIMAGE, falls gesetzt. Ausserdem: enable-transparent-visuals fuer echte Transparenz, das 32-px-Tray-Symbol in der GNOME-Leiste, plattformabhaengige Beschriftungen in Tray-Menue und Einstellungsdialog, AppImage- und deb-Targets, icon.png auf 512 px (electron-builder rechnet daraus die Linux-Groessen herunter) und start.sh als Gegenstueck zu start.cmd. Getestet unter GNOME/Wayland: Fenster auf X11 an erwarteter Position, gemerkte Position wird wiederhergestellt, Tray registriert sich auf DBus, dump liest die Transkripte, beide Pakete bauen und das AppImage startet ohne Schalter. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Claude Live Dashboard
|
||||
|
||||
Ein rahmenloses Always-on-Top-Widget für Windows, das die Auslastung des
|
||||
Ein rahmenloses Always-on-Top-Widget für Windows und Linux, das die Auslastung des
|
||||
Claude-Plans live anzeigt: 5-Stunden-Fenster, Wochenverbrauch, Reset-Countdown,
|
||||
Tokenverbrauch je Modell und die Hochrechnung auf das Fensterende.
|
||||
|
||||
@@ -10,8 +10,12 @@ mitgeschnitten und standardmäßig keine Netzwerkverbindung aufgebaut.
|
||||
|
||||
## Start
|
||||
|
||||
Node.js wird benötigt. Ist es nicht im `PATH` (etwa bei nvm-windows ohne
|
||||
aktive Version), genügt der Versionspfad:
|
||||
Node.js (ab Version 20) wird benötigt.
|
||||
|
||||
### Windows
|
||||
|
||||
Ist Node nicht im `PATH` (etwa bei nvm-windows ohne aktive Version), genügt der
|
||||
Versionspfad:
|
||||
|
||||
```powershell
|
||||
$env:PATH = "$env:APPDATA\nvm\v22.22.1;$env:PATH"
|
||||
@@ -19,9 +23,51 @@ npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
Alternativ `start.cmd` doppelklicken.
|
||||
|
||||
Das Tray-Symbol landet unter Windows zunächst im Überlaufbereich hinter dem
|
||||
`^` in der Taskleiste; per Drag lässt es sich dauerhaft sichtbar machen.
|
||||
|
||||
### Linux (Ubuntu)
|
||||
|
||||
```bash
|
||||
sudo apt install nodejs npm # falls noch nicht vorhanden
|
||||
./start.sh
|
||||
```
|
||||
|
||||
`start.sh` installiert fehlende Abhängigkeiten selbst und startet Electron;
|
||||
`npm install && npm start` tut dasselbe.
|
||||
|
||||
Das Tray-Symbol braucht unter GNOME die Erweiterung **AppIndicator** — beim
|
||||
Ubuntu-Desktop ist sie vorinstalliert und aktiv. Auf einer Minimalinstallation
|
||||
oder unter anderen Oberflächen:
|
||||
|
||||
```bash
|
||||
sudo apt install gnome-shell-extension-appindicator
|
||||
```
|
||||
|
||||
Ohne sie läuft das Widget weiter, nur das Symbol in der oberen Leiste fehlt.
|
||||
Anders als unter Windows ist im StatusNotifierItem-Standard nicht festgelegt,
|
||||
welcher Klick als Aktivierung zählt — verlässlich ist deshalb das Kontextmenü
|
||||
(Rechtsklick) mit „Dashboard anzeigen“ als erstem Eintrag.
|
||||
|
||||
**Wayland:** Ab Electron 36 wählt Chromium in einer Wayland-Sitzung von sich
|
||||
aus Wayland — dort darf sich ein Fenster aber weder selbst positionieren noch
|
||||
dauerhaft in den Vordergrund legen, und genau das ist der Kern dieses Widgets.
|
||||
Die App startet sich deshalb unter Wayland einmalig selbst mit
|
||||
`--ozone-platform=x11` neu und läuft über XWayland. Das geschieht automatisch,
|
||||
es ist nichts einzustellen.
|
||||
|
||||
Der Schalter *muss* auf der Kommandozeile stehen: Ozone legt die Plattform
|
||||
fest, bevor das Main-Skript läuft — `app.commandLine.appendSwitch()` und
|
||||
`ELECTRON_OZONE_PLATFORM_HINT` kommen beide zu spät. Wer die Automatik
|
||||
umgehen will, setzt eine der beiden Größen von Hand; dann greift der Neustart
|
||||
nicht mehr:
|
||||
|
||||
```bash
|
||||
ELECTRON_OZONE_PLATFORM_HINT=wayland ./start.sh # nativ Wayland, ohne Positionierung
|
||||
```
|
||||
|
||||
## Bedienung
|
||||
|
||||
| Aktion | Wirkung |
|
||||
@@ -157,6 +203,7 @@ src/main/oauth-usage.js Serverabfrage, gekapselt und ausfallsicher
|
||||
src/main/calibrate.js Kalibrierung gegen die echte Anzeige
|
||||
src/main/store.js state.json, config.json
|
||||
src/main/paths.js Speicherorte für Konfiguration und Zustand
|
||||
src/main/autostart.js Anmeldestart je Betriebssystem
|
||||
src/preload.js contextBridge fürs Widget
|
||||
src/settings-preload.js contextBridge für den Einstellungsdialog
|
||||
src/renderer/ Widget-Oberfläche
|
||||
@@ -178,6 +225,12 @@ Zwei Details, die nicht offensichtlich sind:
|
||||
|
||||
## Release bauen
|
||||
|
||||
Gebaut wird jeweils auf dem Zielsystem — electron-builder kann `.deb` nicht
|
||||
sinnvoll von Windows aus erzeugen und umgekehrt keine signierten `.exe` unter
|
||||
Linux.
|
||||
|
||||
### Windows
|
||||
|
||||
```powershell
|
||||
npm run dist # Installer + portable Fassung nach release/
|
||||
npm run pack # nur entpackt nach release/win-unpacked (schneller Test)
|
||||
@@ -201,16 +254,49 @@ Start einen SmartScreen-Hinweis („Der Computer wurde durch Windows geschützt
|
||||
Weitergabe an andere wäre ein Zertifikat nötig; für den Eigenbedarf ist es
|
||||
verzichtbar.
|
||||
|
||||
### Linux
|
||||
|
||||
```bash
|
||||
npm run dist:linux # AppImage + .deb nach release/
|
||||
npm run pack:linux # nur entpackt nach release/linux-unpacked
|
||||
```
|
||||
|
||||
Ergebnis in `release/`:
|
||||
|
||||
| Datei | Zweck |
|
||||
|---|---|
|
||||
| `Claude Live Dashboard-1.0.0-x64.AppImage` | läuft ohne Installation |
|
||||
| `Claude Live Dashboard-1.0.0-amd64.deb` | Installation per `sudo apt install ./…deb` |
|
||||
|
||||
Das AppImage muss einmal ausführbar gemacht werden (`chmod +x`) und braucht
|
||||
`libfuse2`. Es trägt sich nicht selbst ins Anwendungsmenü ein — der Autostart
|
||||
über das Tray-Menü funktioniert trotzdem, weil die App den Pfad des Abbilds aus
|
||||
`APPIMAGE` liest und nicht den temporären Einhängepunkt. Das `.deb` bringt
|
||||
Menüeintrag und Symbol mit und installiert nach `/opt/Claude Live Dashboard`.
|
||||
|
||||
> **Ubuntu 24.04 und AppImage.** Seit 24.04 beschränkt AppArmor unprivilegierte
|
||||
> User-Namespaces; die Chromium-Sandbox kann dann beim Start fehlschlagen
|
||||
> (`SUID sandbox helper binary … is not configured correctly`). Zwei Auswege:
|
||||
> das AppImage mit `--no-sandbox` starten, oder ein AppArmor-Profil unter
|
||||
> `/etc/apparmor.d/` hinterlegen. Beim `.deb` tritt das nicht auf — dessen
|
||||
> `postinst` setzt das SUID-Bit auf `chrome-sandbox`.
|
||||
|
||||
### Konfiguration und Zustand
|
||||
|
||||
Beides liegt im Benutzerprofil, nicht im Programmverzeichnis — dort wäre es
|
||||
nach der Installation im asar-Archiv und schreibgeschützt:
|
||||
|
||||
```
|
||||
%APPDATA%\Claude Live Dashboard\config.json
|
||||
%APPDATA%\Claude Live Dashboard\state.json
|
||||
Windows: %APPDATA%\Claude Live Dashboard\config.json
|
||||
%APPDATA%\Claude Live Dashboard\state.json
|
||||
|
||||
Linux: ~/.config/Claude Live Dashboard/config.json
|
||||
~/.config/Claude Live Dashboard/state.json
|
||||
```
|
||||
|
||||
Der Autostart ist kein Feld dieser Dateien: unter Windows steckt er in der
|
||||
Registry, unter Linux in `~/.config/autostart/claude-live-dashboard.desktop`.
|
||||
|
||||
Beim ersten Start wird `config.json` aus der mitgelieferten Vorlage angelegt.
|
||||
Erreichbar über das Tray-Menü (*Konfiguration öffnen* / *Datenordner öffnen*).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user