it-swarm.com.de

Kann ich meine xfce-Arbeitsbereiche anders einrichten?

Ich habe derzeit vier Arbeitsbereiche ("Main", "Game", "Work", "Overflow"). In einer perfekten Konfiguration verfügt der Arbeitsbereich "Spiel" über Verknüpfungen (entweder auf dem Desktop oder in einem Panel) für Steam und einzelne Spiele.

Das Wechseln zu "Arbeit" sollte KEINEN Zusammenhang mit dem Spiel haben, sondern stattdessen Verknüpfungen und Verknüpfungen zu allen meinen arbeitsbezogenen Dateien in Google Text & Tabellen.

Sind in xfce4 individuell angepasste Arbeitsbereiche möglich?

4
SCK

Wenn wir das Setup auf einen unterschiedlichen Satz von Startern pro Desktop beschränken, ist dies nicht sehr kompliziert. Was wir brauchen, ist ein Skript, das im Hintergrund ausgeführt wird, um den aktuellen Arbeitsbereich zu verfolgen und den Satz von Startern automatisch entsprechend zu ändern.

1. Eine Reihe von Startern pro Arbeitsbereich

Angenommen, ich habe vier Arbeitsbereiche. Ich möchte, dass die folgenden Startprogramme für die verschiedenen Arbeitsbereiche verfügbar sind:

Arbeitsbereich 1>Arbeitsbereich 2>Arbeitsbereich 3>Arbeitsbereich 4>

enter image description hereenter image description hereenter image description hereenter image description here

  • Arbeitsbereich 1: Firefox/Idle
  • Arbeitsbereich 2: Gcolor2/Gimp Image Editor/Inkskape
  • Arbeitsbereich 3: Abiword/Gnumeric/Mail Reader
  • Arbeitsbereich 4: Minen/Sudoku

Wie stellt man das ein

  1. Das Skript verwendet wmctrl:

    Sudo apt-get install wmctrl
    
  2. Erstellen Sie in Ihrem Ausgangsverzeichnis (nicht in einem Unterverzeichnis, sondern auf der "ersten" Ebene) ein Verzeichnis mit dem Namen:

    desktop_data
    

    erstellen Sie in diesem Verzeichnis für jeden Ihrer Desktops einen Ordner mit dem Namen (genau):

    desktop_1
    desktop_2
    desktop_3
    desktop_4
    

    <image5>

  3. Erstellen Sie Startprogramme für alle Anwendungen (für alle Arbeitsbereiche) auf Ihrem Desktop und kopieren Sie sie in die entsprechenden Ordner.

  4. Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es als change_launchers.py. Führen Sie den folgenden Befehl in einem Terminalfenster aus:

    python3 /path/to/change_launchers.py
    

    Wenn alles funktioniert, fügen Sie es Ihren Startanwendungen hinzu

    Das Skript

    #!/usr/bin/env python3
    import subprocess
    import os
    import time
    import shutil
    
    home = os.environ["HOME"]
    desktop_dir = home+"/"+"Desktop"
    data_dirstr = home+"/desktop_data/desktop_"
    
    get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    
    def get_desktop():
        return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]
    
    while True:
        curr_dt1 = get_desktop()
        time.sleep(1)
        curr_dt2 = get_desktop()
        # alter the set of launchers when workspace changes
        if not curr_dt1 == curr_dt2:
            datafolder = data_dirstr+curr_dt2
            for f in [f for f in os.listdir(desktop_dir)if f.endswith(".desktop")]:
                subject = desktop_dir+"/"+f
                os.remove(subject)
            for f in os.listdir(datafolder):
                subject = datafolder+"/"+f; target = desktop_dir+"/"+f
                shutil.copyfile(subject, target)
                subprocess.call(["/bin/bash", "-c", "chmod +x "+target])
    

Hinweis

In verschiedenen lokalisierten Versionen von Ubuntu kann sich der Name des Ordners "Desktop" unterscheiden (auf Niederländisch: "Bureaublad"). Wenn in Ihrer Ubuntu-Version der Name des Desktop-Ordners nicht "Desktop" ist, ändern Sie ihn in der Zeile:

desktop_dir = home+"/"+"Desktop"

2. Möglichkeiten, Trägerraketen und Links erweitern

Wenn wir dem Skript einige Zeilen hinzufügen, können die Optionen für die Einstellung pro Arbeitsbereich durch eine Reihe von Links zu Verzeichnissen erweitert werden :

Auf einem Arbeitsbereich haben wir z. Ein Link zum Ordner Dokumente , kombiniert mit Startern von Office-Anwendungen:

enter image description here

In einem anderen Arbeitsbereich haben wir einen Link zum Ordner Bilder , kombiniert mit Startern von Bildbearbeitungsprogrammen:

enter image description here

Wie stellt man das ein

Das Setup ist so ziemlich das gleiche wie in Option 1, aber erstellen Sie zusätzlich in den Datenordnern (siehe Option 1) Links zu Ordnern (mit ln -s <source> <destination>), die auf dem entsprechenden Arbeitsbereich verfügbar sein sollen:

enter image description here

Das Skript

#!/usr/bin/env python3
import subprocess
import os
import time
import shutil

home = os.environ["HOME"]
desktop_dir = home+"/"+"Desktop"
data_dirstr = home+"/desktop_data/desktop_"

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_desktop():
    return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]

while True:
    curr_dt1 = get_desktop()
    time.sleep(1)
    curr_dt2 = get_desktop()
    # alter the set of launchers & links when workspace changes
    if not curr_dt1 == curr_dt2:
        datafolder = data_dirstr+curr_dt2
        for f in os.listdir(desktop_dir):
            subject = desktop_dir+"/"+f
            if os.path.islink(subject) or subject.endswith(".desktop") :
                os.remove(subject) 
        for f in os.listdir(datafolder):
            subject = datafolder+"/"+f; target = desktop_dir+"/"+f
            if os.path.islink(subject):
                os.symlink(os.readlink(subject), target)
            else:
                shutil.copy(subject,target)
4
Jacob Vlijm

Einige andere Desktop-Umgebungen (wie KDE) bieten dies von Haus aus an, dies wird jedoch in XFCE nur teilweise unterstützt.

Was funktioniert nativ in XFCE:

  • Sie können für jeden Arbeitsbereich ein anderes Hintergrundbild festlegen. Dies wird vollständig unterstützt und kann auf einfache Weise über die Benutzeroberfläche für die Arbeitsbereichseinstellungen konfiguriert werden.
  • Sie können einen Bereich auf einen bestimmten Arbeitsbereich auswirken, aber AFAIK gibt es keine GUI-Option, mit der Sie dies konfigurieren können. Das folgende Skript übernimmt jedoch alle Aufgaben.

Die Lösung, die ich gewählt habe:

  1. Erstellen Sie für jeden Arbeitsbereich ein neues Bedienfeld. Sie können auch zusätzliche globale Bereiche erstellen, die in allen Arbeitsbereichen angezeigt werden (einige Elemente wie die Benachrichtigungsleiste können nur einmal hinzugefügt werden, sodass sie in jedem Arbeitsbereich nur in einem globalen Bereich angezeigt werden können).
  2. Konfigurieren Sie das folgende Skript, und führen Sie es aus, um jedes lokale Bedienfeld auf ihren eigenen Arbeitsbereich zu verteilen.
  3. Konfigurieren Sie XFCE so, dass das Skript bei jedem Start ausgeführt wird.
  4. Konfigurieren Sie die Panels wie Sie wollen.

Im Gegensatz zur anderen Antwort wird dieses Skript nicht als Endlosschleife ausgeführt, die den Status jede Sekunde abruft. Es wird nur einmal während der Sitzungseröffnung ausgeführt, um die einzelnen lokalen Panels ihrem eigenen Arbeitsbereich zuzuordnen. Danach wird der Rest nativ vom Fenstermanager verwaltet.

#! /bin/sh

# First panel to move
start=2

# Number of panels to move
count=$( wmctrl -d | wc -l )

desk=0
for winid in $( wmctrl -l | grep 'dom0 xfce4-panel$' \
    | awk "NR==$start,NR==$(( start + count - 1 )) { print \$1; }" )
do
    wmctrl -i -r $winid -b remove,sticky
    wmctrl -i -r $winid -t $desk
    desk=$(( desk + 1 ))
done
  1. Speichern Sie dieses Skript, beispielsweise als local-panels.sh, in Ihrem Ausgangsverzeichnis und machen Sie es ausführbar (chmod u+x ~/local-panels.sh).

  2. Konfigurieren Sie das Skript entsprechend Ihren Anforderungen:

    • $start: XFCE nummeriert Ihre Panels. Dies ist die Nummer des ersten Panels, das Sie lokalisieren möchten. Hier wird das erste Panel global gehalten, und das Panel 2 und höher werden für ihre eigenen Arbeitsbereiche lokal gemacht.
    • $count: Die Anzahl der Panels, die lokal erstellt werden sollen. Standardmäßig entspricht dies der Anzahl der Arbeitsbereiche, d. H. ein anderes lokales Panel pro Arbeitsbereich.
    • $desk: Der erste Arbeitsbereich, der über ein lokales Bedienfeld verfügt. Standardmäßig verfügt jeder Arbeitsbereich über ein lokales Bedienfeld. Wenn Sie diese Variable jedoch auf einen höheren Wert setzen, können Sie in den ersten Arbeitsbereichen kein lokales Bedienfeld festlegen, wenn Sie dies möchten.
  3. Konfigurieren Sie XFCE so, dass dieses Skript beim Öffnen der Sitzung automatisch gestartet wird: Rufen Sie XFCE-Einstellungsmanager> Sitzung und Start auf, und klicken Sie auf die Registerkarte Autostart der Anwendung Klicken Sie dann auf die Schaltfläche Hinzufügen, um die Ausführung des Skripts bei jeder Sitzungseröffnung zu planen.

1
WhiteWinterWolf