firefox auf mehreren Monitoren

Ich habe mehrere Monitore. Zwei an der Zahl und diese sind nicht per Xinerama oder TwinView zusammengefasst. Ich möchte aber auch gleichzeitig den firefox auf beiden Bildschirmen (:0.0 und :0.1) laufen haben. Das mag der firefox aber leider nicht. Der Start wird mit einem Fenster mit folgendem Inhalt abgebrochen:
Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.
Eine mögliche Lösung dieses Problems werde ich im folgenden beschreiben.

Eigentlich ist das ganz einfach. Man muß firefox nur pro Monitor in einem eigenen Profil laden. Da das aber -bei manueller Ausführung- auf die Dauer zu viele Umstände macht kann man das auch automatisieren.

Ein Profil pro Monitor

Als erstes wird für jeden Monitor ein eigenes Profil angelegt. firefox bringt einen Profilmanager mit, man muß ihn nur starten.

user@rechner:~$ firefox -p

Entsprechend jetzt die neuen Arbeitsprofile anlegen. Bei mir heißen sie „links“ und „rechts“. Die Profile liegen in den Verzeichnissen ~/.mozilla/firefox/links und ~/.mozilla/firefox/rechts. Der firefox legt beim starten immer ein Defaultprofil mit dem Namen [zufallswert].default an, mit dem er arbeitet. Dieses ist vermutlich schon angelegt und häuslich eingerichtet mit extensions, plugins, links usw.
Sollte das nicht vorhanden sein, kann man einfach ein mal den firefox starten.
Das Defaultprofil wird jetzt in unsere beiden Arbeitsprofile kopiert:

user@rechner:~$ cd ~/.mozilla/firefox
user@rechner:~$ ls
user@rechner:~$ [Zufallswert].default  links  profiles.ini  rechts
user@rechner:~$ cp [Zufallswert].default rechts
user@rechner:~$ cp [Zufallswert].default links
user@rechner:~$ 

Damit sind unsere Einstellungen, Daten, Bookmarks und so weiter in die Arbeitsprofile kopiert. Die Berechtigungen kann man noch anpassen, wenn man möchte.
Das war’s hier schon.

Skript zum Programmstart

Man legt ein kleines Skript an, dass den Firefox mit den entsprechenden Parametern für den Display aufruft. Die Abfrage auf welchem Bildschirm das Programm denn nun läuft erfolgt mittels der Systemvariablen DISPLAY, welche natürlich auch vorhanden sein muß. Prüfen kann man das einfach in der Konsole der Wahl, mit einem Aufruf von:

user@rechner:~$ echo $DISPLAY
:0.0
user@rechner:~$ 

Das Skript selbst habe ich in Python3 geschrieben, da ich python besser lernen möchte. Man sollte es nur benutzen, wenn man es auch versteht. Ich lade jeden herzlich ein, daraus ein shell oder bash Skript zu machen. Das kann dann hier noch eingefügt werden. Benannt habe ich es als firefox.py.

#!/usr/bin/env python3

# firefox.py
# Start firefox with different profiles.
# You have to have $DISPLAY from x.org to run the script.
# Do what you want with it.

import os
import subprocess as sp
import sys

def main():
    
    cmd = ['firefox', '-p']
    
    # If _you_ call the profilemanager.
    if '-p' in sys.argv or '-ProfileManager' in sys.argv:
        sp.call(cmd)
        sys.exit(0)

    # The key is the $DISPLAY variable. The item is the corresponding 
    # profile for firefox
    profiles = {':0.0': 'rechts', 
                ':0.1': 'links'}
    display = os.environ.get('DISPLAY')
    cmd.append(profiles[display])

    # Add remaining parameters
    for p in range(1,len(sys.argv)):
        cmd.append(sys.argv[p])

    #print(cmd) # For debugging
    sp.call(cmd)

if __name__ == '__main__':
    main()

Gespeichert habe ich persönlich es dort, wo die eigenen Skripte und Helferlein gespeichert sind. Das mag jeder machen, wie er möchte.
Als letzten Schritt hier müssen wir das Skript noch von überall ausführbar machen. Dazu gibt es natrülich auch wieder mehrere Wege. Ich persönlich habe meine eigenen Skripte gerne in einem eigenen Verzeichnis in /home/. Damit das dann auch ausführbar ist, muß man es ausführbar machen!
Klingt komisch, ist aber so!
Also:

user@rechner:~$ chmod +x /pfad/zu/firefox.py
user@rechner:~$ su
Password: [passwort]
root@rechner:/home/user# ln -s /pfad/zu/firefox.py /usr/local/bin/firefox.py
root@rechner:/home/user# 

Durch den Softlink kann der Browser von überall aus ausgeführt werden.
Natürlich kann man hier auch ein alias im System zu setzen. Das mag ich nur hier nicht, da es uns die Möglichkeit nimmt einfach den Browser „nativ“ zu starten, also ohne unser Skript.

Synchronisation

Da man ja jetzt nicht immer aufpassen möchte, auf welchem Monitor man was im Netz erledigen kann und in welchem Profil das Lesezeichen gespeichert ist, müssen die Profile synchronisiert werden.
Dazu kann man cron verwenden.

user@rechner:~$ crontab -e

Um die Profile alle 5 Minuten anzugleichen kann man folgende drei Zeilen an die eigenen cron Jobs anfügen:

# Firefox profile synchronisieren
*/5 0 0 0 0 0 rsync -avR --delete /home/user/.mozilla/firefox/links/ /home/user/.mozilla/firefox/rechts
*/5 0 0 0 0 0 rsync -avR --delete /home/user/.mozilla/firefox/rechts/ /home/user/.mozilla/firefox/links

Diese synchronisation ist natürlich fehleranfällig. Es wird auch ab und an passieren, daß gespeicherte Bookmarks oder andere Daten verloren gehen. Das habe ich gemerkt, es ist aber niemals bei mir ausgeartet. Wenn man das weiß, kann man damit ja auch umgehen und entsprechend handeln. Oder man schreibt eine richtige, bidirektionale synchronisation, respektive benutzt eine fertige. Das Netz gibt da weiteren Aufschluß.

Anwendung

Zur Anwendung ersetzt man jetzt an allen Stellen, an denen der Browser aufgerufen wird, das firefox durch firefox.py.
Das war bei meiner Fluxbox recht einfach und schnell im Menü und in den Shortcuts erledigt. Man sollte sich bei der Arbeit im Terminal nur angewöhnen, anstatt firefox, firefox.py aufzurufen, da man sonst sehr wahrscheinlich in einem falschen Profil arbeitet.

Andere Browser

Wenn man andere Browser in der Benutzung hat, kann das gleiche Problem auftauchen. Opera läuft auch nicht auf zwei verschiedenen Bildschirmen, glaube ich. Chrome kenne ich gar nicht.
Solange man hier Unterscheidungen, wie Profile, treffen kann, ist dieses kleine Tutorium schnell an die eigenen Bedürfnisse angepasst. Man muß sich natürlich mit seinem Browser dann etwas tiefgreifender auseinandersetzen.

Abschließende Worte

Abschließend wie immer der persönliche Hinweis: Wer einen Fehler findet möge ihn mir bitte mitteilen, damit er berichtigt werden kann. Anderweitiges Feedback, im positiven und vor allem konstruktiv ist natürlich sehr willkommen.
Viel Spaß mit dem -hoffentlich unsichtbaren- Helferchen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Wordpress Anti-Spam durch WP-SpamShield