Visuelles Feedback zum Workspace-Switch in xfce erhalten


7

Ich bin mir nicht sicher, ob dies eine angemessene Frage für diese Site ist, da sie nicht wirklich spezifisch für Ubuntu ist. Diejenigen, die der Meinung sind, dass dies nicht der Fall ist, sollten wahrscheinlich auf meinen Crosspost auf der Stackexchange-Site für Unix und Linux antworten . Entschuldigen Sie die Verwirrung, ich verhandele immer noch über die Grenzen zwischen diesen Websites (und superuser.com, wo ich auch Crossposting durchgeführt habe ). Ich denke wir alle sind es.

Ich nutze Arbeitsbereiche stark und habe viele davon (ein 6x4-Raster). Normalerweise führe ich openbox aus, verwende aber derzeit einen Computer, auf dem openbox nicht eingerichtet ist. Daher verwende ich xfce, da es bereits größtenteils nach meinen Wünschen konfiguriert ist. Ich habe mich daran gewöhnt, visuelles Feedback zu erhalten, wenn ich den Arbeitsbereich wechsle und mir zeige, in welchen ich gerade umgezogen bin, und bin in xfce etwas desorientiert. In Openbox ist dies ein großes Heads-up-Display, was ziemlich ideal ist. Ich bin mir bewusst, dass das Applet des Arbeitsbereichsumschaltfelds den aktiven Arbeitsbereich hervorhebt, aber dies scheint nur für Arbeitsbereiche zu funktionieren, in denen Desktop-Speicherplatz angezeigt wird. Da ich im Allgemeinen alle meine Fenster maximiert habe, ist dies nicht besonders hilfreich.

Gibt es eine Möglichkeit, visuelles Feedback zu aktivieren, das den neuen Arbeitsbereich beim Wechseln des Arbeitsbereichs in xfce anzeigt?


Update für andere, die Metacity-Verhalten vermissen, siehe: bugzilla.xfce.org/show_bug.cgi?id=10276
jonasfj

Antworten:


10

Ich habe einen kleinen Code geschrieben, der eine Benachrichtigung zum Umschalten des Arbeitsbereichs anzeigt. Dieser Code erfordert libnotify und libwnck

Verwenden Sie zum Kompilieren den folgenden Befehl:

gcc -O2 -o wsnd `pkg-config  --cflags --libs libnotify --libs libwnck` wsn.c

Wenn Sie mit dem obigen Befehl Kompilierungsfehler gefunden haben, versuchen Sie Folgendes:

gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wsnd `pkg-config  --cflags --libs libnotify --libs libwnck-1.0` wsn.c

So testen Sie es von einem Terminal aus: ./wsnd

Fügen Sie es als XFCE-Startanwendung ein: In XFCE müssen Sie es als Startanwendung unter Einstellungen-Manager-> Sitzung und Start -> Anwendungsautostart hinzufügen

Der Code:

//////////////////////////////////////////////////////////////////////////////////////
// Workspace Switch Notifier                                                        //
// Shows a OSD with workspace name on workspace switching action                    //
//                                                                                  //
// wsn.c -                                                                          //
//                                                                                  //
// Authors:                                                                         //
//    Isaac Maia Pessoa                                                             //
//                                                                                  //
// This program is free software: you can redistribute it and/or modify it          //
// under the terms of the GNU General Public License version 3, as published        //
// by the Free Software Foundation.                                                 //
//                                                                                  //
// This program is distributed in the hope that it will be useful, but              //
// WITHOUT ANY WARRANTY; without even the implied warranties of                     //
// MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR               //
// PURPOSE.  See the GNU General Public License for more details.                   //
//                                                                                  //
// You should have received a copy of the GNU General Public License along          //
// with this program.  If not, see <http://www.gnu.org/licenses/>.                  //
//////////////////////////////////////////////////////////////////////////////////////

#include <libnotify/notify.h>
#include <libwnck/libwnck.h>

#define N_SUMMARY "Workspace Changed"
#define N_ICON    "dialog-information"
#define N_APPNAME "workspace switch notifier"
#define N_TIMEOUT 2000 /*2000ms = 2s */

static NotifyNotification * m_notification = NULL;

static void
on_active_workspace_changed (WnckScreen    *screen,
                             WnckWorkspace *space,
                             gpointer      data)
{

  WnckWorkspace * active_workspace = wnck_screen_get_active_workspace(screen);
  const char * w_name = wnck_workspace_get_name (active_workspace);

  notify_notification_update(m_notification, N_SUMMARY, w_name, N_ICON);
  notify_notification_show(m_notification, NULL);
}

int main(int argc, char ** argv)
{

   GMainLoop *loop;   
   WnckScreen *screen;

   if (notify_init(N_APPNAME))
       m_notification = notify_notification_new(N_SUMMARY, "" , N_ICON);
   else
       fprintf(stderr, "Failed to init notifications\n");
   notify_notification_set_timeout(m_notification, N_TIMEOUT);

   gdk_init (&argc, &argv);

   loop = g_main_loop_new (NULL, FALSE);
   screen = wnck_screen_get_default();

   g_signal_connect (screen, "active-workspace-changed",
                    G_CALLBACK (on_active_workspace_changed), NULL);

   g_main_loop_run (loop);

   g_main_loop_unref (loop);    

   return 0;
}

Cool! Ich benutze xfce nicht mehr, daher glaube ich nicht, dass ich Zeit habe, dies zu testen. Wenn jemand anderes bestätigen kann, dass es funktioniert (es sieht aufgrund meiner begrenzten Kenntnisse des GTK-Codes so aus, wie es sollte), werde ich diese Antwort akzeptieren. Ich denke, in der Praxis wäre es etwas gewöhnungsbedürftig, da der Name des Arbeitsbereichs angegeben wird, anstatt seine Position in einem Rasterbild anzuzeigen. Aber nach anderthalb Jahren sieht es nicht so aus, als würde etwas Idealeres kommen :) Vielleicht könnten Ihnen die Xubuntu-Betreuer helfen, dies in das Repository zu bringen, wenn Sie interessiert sind.
Intuitiert

Ja das ist absolut funktionsfähig. Auf Arch habe ich anscheinend libwnck-3.0, daher habe ich die Versionsnummer im zweiten Befehl ein wenig erhöht.
Pestaa

Funktioniert super! Habe gerade das Symbol und den Text geändert. Vielen Dank!
Victor

Versucht, dies bei einer Neuinstallation von Xubuntu 16.04 zu kompilieren, schlägt jedoch mit wsn.c fehl: 23: 30: schwerwiegender Fehler: libnotify / notify.h: Keine solche Datei oder kein solches Verzeichnis
sbrattla

3

Ich habe Isaac Pessoas Antwort an meine eigenen Vorlieben angepasst. Anstatt eine Benachrichtigung über den geänderten Arbeitsbereich anzuzeigen, wird kurz ein ausgeblendetes Xfce-Bedienfeld mit dem Widget für den Arbeitsbereich-Umschalter angezeigt.

So sieht es beim Wechseln des Arbeitsbereichs aus: Beispiel

Speichern Sie diese Datei als wschanged.c:

#include <libwnck/libwnck.h>
#include <stdlib.h>

static void
on_active_workspace_changed (WnckScreen    *screen,
                             WnckWorkspace *space,
                             gpointer      data)
{
    // Executes a script on workspace change
    system ("~/.workspace-changed");
}

int main(int argc, char ** argv)
{

   GMainLoop *loop;   
   WnckScreen *screen;

   gdk_init (&argc, &argv);

   loop = g_main_loop_new (NULL, FALSE);
   screen = wnck_screen_get_default();

   g_signal_connect (screen, "active-workspace-changed",
                    G_CALLBACK (on_active_workspace_changed), NULL);

   g_main_loop_run (loop);
   g_main_loop_unref (loop);    

   return 0;
}

Erstellen Sie nun irgendwo am Rand Ihres Bildschirms ein neues Xfce-Bedienfeld und stellen Sie es so ein, dass es automatisch ausgeblendet wird. Fügen Sie das Arbeitsbereich-Umschalter-Widget hinzu. Notieren Sie sich die Panel-Nummer, die im Dropdown-Menü des Fensters mit den Panel-Einstellungen angezeigt wird.

Erstellen Sie eine vom Arbeitsbereich geänderte Datei in Ihrem Home-Verzeichnis und ersetzen Sie <P_NUMBER> durch die soeben erstellte Panel-Nummer. Stellen Sie sicher, dass diese Datei ausführbar ist! ( chmod + x .workspace geändert )

#!/bin/sh

# Show the auto-hidden workspace panel for a moment, then set it to autohide again
xfconf-query -c xfce4-panel -p /panels/panel-<P_NUMBER>/autohide -t bool -s false
xfconf-query -c xfce4-panel -p /panels/panel-<P_NUMBER>/autohide -t bool -s true

Kompilieren Sie jetzt mit:

gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wschanged `pkg-config  --cflags --libs libwnck-1.0` wschanged.c

Testen Sie es in Ihrem Terminal ( ./wschanged ), um sicherzustellen, dass alles richtig aussieht. Wenn Sie zufrieden sind, fügen Sie das Programm als Xfce-Startanwendung hinzu: Einstellungen -> Sitzung und Start -> Autostart der Anwendung.


1

Sie könnten conky installieren

Speichern Sie dies in einer Datei ...

# Static and Variable Values used by Habitual/John Jones

# Static Values
own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
use_xft yes
draw_outline no
draw_borders no
uppercase no
draw_shades no
draw_shades yes
double_buffer yes
border_width 0
text_buffer_size 2048
default_color white
update_interval 1.0

# Variable Values # These values are the ONLY thing that change from widget to widget
alignment bm
gap_x 5
gap_y 44
minimum_size 50 1
maximum_width 100

TEXT
${desktop_number}

Führen Sie es in Xfce aus. (Terminal) -> mit conky -c / path / to / file &

icon / launcher conky -c / path / to / file

Jedes Mal, wenn Sie den Desktop wechseln, wird die Nummer des Desktops auf dem Bildschirm angezeigt.

Der Wert "Ausrichtung bm" steuert die Desktop-Platzierung. bm ist unten in der Mitte.

Informationen zu DOCs finden Sie unter http://conky.sourceforge.net/docs.html .


Hmm. Ich könnte etwas falsch machen. Ich sehe eine Zahl am unteren Rand des Bildschirms, aber a) es ist immer 24 (die Anzahl der Desktops, die ich habe); b) Es wird nur angezeigt, wenn dieser Teil des Desktops nicht von einem Fenster abgedeckt ist. Ich möchte, dass es schön groß erscheint (etwa 1/4 des gesamten Bildschirmbereichs einnimmt), über dem, was bereits angezeigt wird, und nach etwa einer Sekunde ausgeblendet wird.
Intuition

1

Das einzige, woran ich denken kann, ist, für jeden Desktop separate Hintergrundbilder zu verwenden (ich glaube, dass dies möglich ist, aber ich kann es nicht bestätigen, da ich nicht jeden Tag xfce verwende). Wenn Sie nichts dagegen nicht Compiz verwenden, können Sie konfigurieren es ähnlich wie Xfwm arbeiten, und die Installation auf den Arbeitsbereich namer - Plugin, mit dem Sie für jeden Arbeitsbereich Namen haben können angezeigt werden, wenn Sie wechseln.


Hmm .. Ich hoffe, dass ich die Verwendung von Compiz vermeiden kann, da ich einen relativ alten Laptop verwende, aber das ist gut zu wissen.
Intuitiert

1

Ich habe das Conky-Skript oben geringfügig geändert

Dies ermöglicht Transparenz für die Zahlen unter XFCE und Sie können auch die Schriftgröße ändern. Außerdem wird die richtige Variable verwendet, um die Identität des Arbeitsbereichs anzuzeigen

# Static and Variable Values used by Habitual/John Jones
# Added to by AMH to add transparency under newer XFCE, the gothic font
# for sizing and changed the desktop variable to display the workspace
# correctly

# Static Values
own_window yes
own_window_transparent yes
own_window_type desktop
# Added to allow transparency in XFCE
own_window_argb_visual yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
use_xft yes
draw_outline no
draw_borders no
uppercase no
draw_shades no
draw_shades yes
double_buffer yes
border_width 0
text_buffer_size 2048
default_color white
update_interval 1.0

# Variable Values # These values are the ONLY thing that change from widget to widget
alignment bm
gap_x 5
gap_y 44
minimum_size 50 1
maximum_width 100

TEXT
${color light blue}${font URW Gothic L:size=60}${desktop}

1

Genau das habe ich gesucht. Vielen Dank, Isaac Pessoa und zspotter! Ich verwende Xfce auf Arch, und um es auf ein Minimum zu beschränken, wollte ich nicht auf die Installation von Compiz zurückgreifen.

Ich bin mir nicht sicher, ob dies jemand anderem passieren würde oder passiert ist, aber ich habe etwas ziemlich Seltsames bemerkt: Das Panel, das ich als Arbeitsbereichsanzeige eingerichtet habe, wurde so konfiguriert, dass 3 Zeilen angezeigt werden (ich habe 9 Desktops). Es sollte ungefähr die gleiche Größe haben wie Ubuntu (ca. 3 x 6 Zoll). Es wurde jedoch nur eine Zeile angezeigt, bis ich mit der rechten Maustaste auf das Bedienfeld geklickt und Eigenschaften ausgewählt hatte (um das Übersichtsfenster des Arbeitsbereich-Umschalters anzuzeigen). Das Update bestand darin, den Arbeitsbereich-Umschalter zu entfernen, der sich in einem anderen Bereich befand.

Um zu ändern, wie lange das Arbeitsbereich-Anzeigefeld angezeigt wird, bevor es wieder automatisch ausgeblendet wird, müssen Sie Folgendes zu Ihrer .gtkrc-2.0-Datei hinzufügen:

    style "xfce-panel-window-style"
{
  # Time in miliseconds before the panel will unhide on an enter event
  XfcePanelWindow::popup-delay = 225

  # Time in miliseconds before the panel will hide on a leave event
  XfcePanelWindow::popdown-delay = 350

  # Size of autohide window in pixels
  XfcePanelWindow::autohide-size = 3
}
class "XfcePanelWindow" style "xfce-panel-window-style"

Hier gefunden

In meinem Fall existiert die gtkrc-2.0-Datei nicht, da ich auf Arch bin. Ich musste das zur gtkrc-Datei in meinem Verzeichnis ~ / .themes / [Themenname hier] hinzufügen.

Ändern Sie die Popup-Verzögerung und Popdown-Verzögerung nach Ihren Wünschen. Aus irgendeinem seltsamen Grund musste ich die Werte auf ungefähr die Hälfte von dem einstellen, was ich wollte. Hat wahrscheinlich etwas mit der Ausführung des Skripts zu tun.

Wenn Sie ein Bedienfeld in der Mitte Ihres Bildschirms mit einem Raster von Arbeitsbereichen platzieren möchten (ähnlich wie bei Ubuntu), müssen Sie das Alpha dieses Bedienfelds (unter der Registerkarte "Darstellung" in den Bedienfeldeinstellungen) ganz nach unten einstellen. Auf diese Weise sehen Sie keine kleine Leiste über all Ihren Fenstern. Wenn Sie den Wert für die Größe der automatischen Ausblendung auf 1 setzen, kann dieses Bedienfeld nicht versehentlich angezeigt werden.

Eine letzte Sache: Wenn sich der Cursor beim Wechseln des Arbeitsbereichs zufällig oben auf dem Bedienfeld befindet, wird zufällig ein Tooltip angezeigt, und ich muss den Cursor vom Bedienfeld wegbewegen, damit er wieder ausgeblendet wird. Keine große Sache.

EDIT: Ich habe dafür zspotter's Fix verwendet.

BEARBEITEN: Ich habe gerade bemerkt, dass das Scrollen der Maus, während Sie sich auf den Desktop konzentrieren, den Arbeitsbereich wechselt (unter Verwendung von zspotter's Fix). Nett!

BEARBEITEN: Dadurch wird mein Benachrichtigungs-Popus (dh bei Verwendung von Lautstärketasten usw.) an der falschen Stelle angezeigt. Insbesondere bei Verwendung der Optionen oben links oder oben rechts werden die Benachrichtigungen in der Mitte links oder in der Mitte rechts angezeigt. Ich habe osd-notify nicht installiert - nur xfce4-notifyd. Alles in den Einstellungen schien korrekt zu sein. Als ich das Panel entfernte und wschanged von der Autostartliste der Anwendungen entfernte, wurde das Problem behoben.


1

Ich habe diesen kleinen Python3-Code-Blob, der auf das Wechseln des Arbeitsbereichs reagiert.

Es wird nicht gemacht, um eine Benachrichtigung anzuzeigen, sondern um einen Chrom-Redraw-Fehler zu umgehen. Alles, was Sie mit dem Workspace-Switch tun möchten, können Sie jedoch problemlos in die Funktion "fire_the_kludge" einbinden.

https://github.com/aking1012/chromiumKludge/blob/master/kludge.py

Hier ist ein überarbeitetes Beispiel, das libnotify2 verwendet, um Ihnen Ihren Arbeitsbereich mitzuteilen:

#!/usr/bin/env python3

from gi.repository import Wnck, Gtk, Notify
import signal, time

class Kludge:
    def __init__(self):
        self.first = True
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.screen = Wnck.Screen.get_default()
        Notify.init("Workspace Switch Notifier")

    def fire_the_kludge(self, data_a, data_b):
        time.sleep(.1)
        try:
            workspace_num = str(self.screen.get_active_workspace().get_number())
        except:
            workspace_num = "Some error happened"
        popup = Notify.Notification.new("Workspace: " + workspace_num)
        popup.show()
        time.sleep(1)
        popup.close()

    def main(self):
        self.screen.connect("active-workspace-changed", self.fire_the_kludge)
        Gtk.main()

if __name__ == '__main__':
    print("Here comes the kludge")
    kludge = Kludge()
    kludge.main()

0

Die meisten Antworten sind 5 Jahre alt und ab xubuntu 18.04 funktionieren sie nicht mehr. Ich habe eine aktualisierte Version der Antwort von zspotter zusammengestellt, die am 18.04 läuft. Der Einfachheit halber gehe ich davon aus, dass sich alle Dateien im Home-Verzeichnis befinden. Sie können die Skripte einfach an einen anderen Ordner anpassen.

Erstellen Sie zunächst eine Datei mit dem Namen wschanged.c mit folgendem Inhalt:

#include <libwnck/libwnck.h>
#include <stdlib.h>

static void
on_active_workspace_changed (WnckScreen    *screen,
                             WnckWorkspace *space,
                             gpointer      data)
{
    // Executes a script on workspace change
    system ("~/.workspace-changed");
}

int main(int argc, char ** argv)
{

   GMainLoop *loop;   
   WnckScreen *screen;

   gdk_init (&argc, &argv);

   loop = g_main_loop_new (NULL, FALSE);
   screen = wnck_screen_get_default();

   g_signal_connect (screen, "active-workspace-changed",
                    G_CALLBACK (on_active_workspace_changed), NULL);

   g_main_loop_run (loop);
   g_main_loop_unref (loop);    

   return 0;
}

Zweitens erstellen Sie ein neues Xfce-Bedienfeld an einer beliebigen Stelle am Bildschirmrand und stellen es so ein, dass es automatisch ausgeblendet wird. Fügen Sie das Arbeitsbereich-Umschalter-Widget hinzu. Notieren Sie sich die Panel-Nummer, wie sie im Dropdown-Menü des Panel-Einstellungsfensters angezeigt wird. In unserem Beispiel ist die Panel-Nummer 2, und passen Sie sie entsprechend an.

Drittens wird es hier anders. Erstellen Sie ein anderes Skript im selben Ordner namens wschanged.sh mit diesem Inhalt (denken Sie daran, es mit Rechtsklick als ausführbar festzulegen -> Eigenschaften-> als ausführbare Datei festlegen oder chmod +x .wschanged.shin einem Terminal):

#!/bin/sh

# Show the auto-hidden workspace panel for a moment, then set it to autohide again
xfconf-query -c xfce4-panel -p /panels/panel-2/autohide-behavior -s 1
xfconf-query -c xfce4-panel -p /panels/panel-2/autohide-behavior -s 2

Die Bedienfelder haben keine Autohide-Eigenschaft mehr, sondern eine Autohide-Verhaltenseigenschaft und damit die Anpassungen im Skript.

Viertens müssen wir die .c-Datei kompilieren. Die Befehle in den vorherigen Antworten funktionieren nicht mehr, wie hier vorgeschlagen. Verwenden Sie:

gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wschanged `pkg-config --cflags libwnck-3.0` wschanged.c `pkg-config --libs libwnck-3.0`

Wenn Sie eine Fehlermeldung erhalten, installieren Sie libwnck-3-dev mit sudo apt install libwnck-3-dev.

Sie können das Skript jetzt mit testen ./wschanged(platzieren Sie sich im selben Verzeichnis wie die ausführbare Datei). Sie können jetzt auch festlegen, dass der Befehl beim Start ausgeführt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.