web-dev-qa-db-fra.com

Obtenir un retour visuel du commutateur d'espace de travail dans xfce

Pas sûr que ce soit une question appropriée pour ce site, car ce n'est pas vraiment spécifique à Ubuntu. Ceux qui pensent que ce n’est pas le cas devraient probablement répondre à crosspost sur les sites Unix et Linux stackexchange . Désolé de toute confusion, je suis toujours en train de négocier les limites entre ces sites (et superuser.com, où je également transposté ). Je suppose que nous sommes tous.

J'utilise beaucoup les espaces de travail et j'en ai beaucoup (une grille 6x4). J'utilise habituellement openbox, mais j'utilise actuellement une machine qui n'a pas encore configuré openbox. J'utilise donc xfce car il est déjà configuré pour la plupart à mon goût. Je me suis habitué à recevoir des informations visuelles lorsque je change d’espace de travail, me montrant celui dans lequel je viens de déménager et me trouve un peu désorienté sous xfce. En openbox, c'est un grand affichage tête haute, ce qui est plutôt idéal. Je suis conscient que l'applet du panneau de commutation d'espace de travail mettra en surbrillance l'espace de travail actif, mais cela ne semble fonctionner que pour les espaces de travail affichant un espace de bureau. comme j'ai généralement toutes mes fenêtres maximisées, ce n'est pas très utile.

Existe-t-il un moyen d'activer les commentaires visuels montrant le nouvel espace de travail lors du changement d'espaces de travail dans xfce?

7
intuited

J'ai écrit un petit code qui affiche une notification sur l'action du commutateur d'espace de travail. Ce code nécessite libnotify et libwnck

Pour le compiler, utilisez la commande:

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

Si vous avez trouvé des erreurs de compilation avec la commande ci-dessus, essayez celui-ci:

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

Pour le tester depuis un terminal: ./wsnd

Incluez-le en tant qu'application de démarrage XFCE: sous XFCE, vous devez l'ajouter en tant qu'application de démarrage sur settings-manager-> session et démarrage -> Démarrage automatique de l'application.

Le 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;
}
10
Isaac Pessoa

J'ai modifié la réponse d'Isaac Pessoa en fonction de mes préférences. Au lieu d'afficher une notification sur un espace de travail modifié, cela affiche brièvement un panneau Xfce caché avec le widget Sélecteur d'espace de travail.

Voici à quoi cela ressemble lors du changement d'espaces de travail: example

Enregistrez ce fichier sous 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;
}

Créez maintenant un nouveau panneau Xfce n'importe où sur le bord de votre écran et configurez-le pour le masquer automatiquement. Ajoutez le widget de commutation d'espace de travail. Notez le numéro du panneau, comme indiqué dans le menu déroulant de la fenêtre de préférences du panneau.

Créez un fichier .workspace-modifié dans votre répertoire de base en remplaçant <P_NUMBER> par le numéro de panneau que vous venez de créer. Assurez-vous que ce fichier est exécutable! (chmod + x .workspace-modified)

#!/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

Maintenant compiler avec:

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

Testez-le dans votre terminal (./ wschanged) pour vous assurer que tout se présente bien. Lorsque vous êtes satisfait, ajoutez le programme en tant qu’application de démarrage Xfce: Paramètres -> Session et démarrage -> Démarrage automatique de l’application.

2
zspotter

J'ai ce petit code-blob python3 qui réagit au changement d'espace de travail.

Ce n'est pas fait pour afficher une notification, mais pour contourner un bug de redessinage du chrome. Tout ce que vous voulez sur le commutateur d’espace de travail peut être facilement ajouté à la fonction "fire_the_kludge".

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

Voici un exemple retravaillé qui utilise libnotify2 pour vous indiquer votre espace de travail:

#!/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 __== '__main__':
    print("Here comes the kludge")
    kludge = Kludge()
    kludge.main()
1
RobotHumans

La seule chose à laquelle je peux penser est d'utiliser des fonds d'écran séparés (je crois que c'est possible, mais je ne peux pas confirmer car je n'utilise pas xfce tous les jours) pour chaque bureau. Si cela ne vous dérange pas d’utiliser Compiz, vous pouvez le configurer de manière très semblable à xfwm et installer le plug-in de nommage d’espace de travail, qui vous permet d’avoir des noms pour chaque espace de travail affichés lorsque vous passez.

1
RolandiXor

J'ai légèrement modifié le script conky ci-dessus

Cela permettra la transparence des nombres sous XFCE et vous pourrez également modifier la taille de la police. Il utilise également la bonne variable pour afficher l'identité de l'espace de travail.

# 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
Alan HArding

Vous pouvez installer conky

enregistrer ceci dans un fichier ...

# 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}

lancez-le sous Xfce. (terminal) -> avec conky -c/chemin/vers/fichier &

icône/launcher conky -c/chemin/vers/fichier

Chaque fois que vous changez de bureau, le numéro du bureau apparaît à l'écran.

la valeur "alignement bm" contrôle le placement du bureau. bm est en bas au milieu.

Voir http://conky.sourceforge.net/docs.html pour les DOC.

1
Habitual

Ceci est exactement ce que je cherchais. Merci, Isaac Pessoa et zspotter! J'utilise Xfce sur Arch, et dans un souci de minimisation, je ne voulais pas recourir à Compiz.

Je ne sais pas si cela est arrivé ou si cela est arrivé à quelqu'un d'autre, mais j'ai remarqué quelque chose d'assez étrange: le panneau que j'ai configuré pour être l'indicateur d'espace de travail était configuré pour afficher 3 lignes (j'ai 9 bureaux). Sa taille devrait être à peu près la même que celle d’Ubuntu (environ 3 x 6 pouces). Cependant, il ne montrerait qu'une ligne jusqu'à ce que je clique avec le bouton droit sur le panneau et que je sélectionne les propriétés (ce qui, pour être clair, consistait à afficher la fenêtre des propriétés du sélecteur d'espace de travail). Le correctif consistait à supprimer le commutateur d'espace de travail qui se trouvait sur un autre panneau.

De plus, afin de modifier la durée d'affichage du panneau d'indicateur d'espace de travail avant son masquage automatique, vous devez ajouter ceci à votre fichier .gtkrc-2.0:

    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"

trouvé ici

Dans mon cas, puisque je suis sur Arch, le fichier gtkrc-2.0 n'existe pas. J'ai dû ajouter cela au fichier gtkrc dans mon répertoire ~/.themes/[nom du thème ici].

Modifiez le délai contextuel et le délai contextuel à votre convenance. Pour une raison étrange, je devais fixer les valeurs à environ la moitié de ce que je voulais qu'elles soient. Cela a probablement quelque chose à voir avec wschanged qui exécute le script.

Si vous souhaitez placer un panneau au milieu de votre écran présentant une grille d'espaces de travail (similaire à Ubuntu), vous devez définir l'alpha de ce panneau (sous l'onglet Apparence dans les préférences du panneau) au minimum. De cette façon, vous ne verrez pas un petit bar au-dessus de toutes vos fenêtres. Si vous définissez la valeur autohide-size sur 1, il sera presque impossible pour ce panneau de s'afficher par accident.

Une dernière chose: si le curseur se trouve au-dessus du panneau lorsque vous changez d’espaces de travail, une info-bulle apparaît au hasard et vous devez le déplacer pour le masquer à nouveau. Pas un gros problème cependant.

EDIT: J'ai utilisé la solution de zspotter pour cela.

EDIT: Je viens de remarquer que le fait de faire défiler la souris en étant concentré sur le bureau changera d’espaces de travail (en utilisant le correctif de zspotter). Agréable!

EDIT: Cela fait que mon message de notification (lorsqu’on utilise des touches de volume, etc.) apparaît au mauvais endroit. En particulier, lorsque vous utilisez les options en haut à gauche ou en haut à droite, les notifications apparaissent au centre-gauche ou au centre-droit. Je n'ai pas installé osd-notify - juste xfce4-notifyd. Tout dans les paramètres semblait être correct. Lorsque j'ai retiré le panneau et enlevé la liste de démarrage automatique des applications, le problème a été corrigé.

1
brciii

La plupart des réponses ont 5 ans et à partir de xubuntu 18.04, elles ne fonctionnent plus. J'ai mis au point une version mise à jour de la réponse de zspotter qui s'exécute le 18.04. Pour simplifier, je supposerai que tous les fichiers sont situés dans le répertoire de base. Vous pouvez facilement adapter les scripts à un autre dossier.

Commencez par créer un fichier appelé wschanged.c avec ce contenu:

#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;
}

Deuxièmement, créez un nouveau panneau Xfce n'importe où sur le bord de votre écran et configurez-le pour le masquer automatiquement. Ajoutez le widget de commutateur d'espace de travail. Notez le numéro du panneau, comme indiqué dans le menu déroulant de la fenêtre de préférences du panneau. Dans notre exemple, le numéro du panneau est 2, ajustez en conséquence.

Troisièmement, les choses commencent à être différentes, créez un autre script dans le même dossier appelé wschanged.sh avec ce contenu (n'oubliez pas de le définir comme exécutable avec rightclick -> propriétés-> défini comme exécutable, ou chmod +x .wschanged.sh dans un 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

Les panneaux n’ont plus une propriété autohide mais une propriété autohide-behavior et donc les ajustements du script.

Quatrièmement, nous devons compiler le fichier .c, les commandes des réponses précédentes ne fonctionnent plus, comme suggéré ici use:

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

Si vous obtenez une erreur, installez libwnck-3-dev avec Sudo apt install libwnck-3-dev.

Vous pouvez maintenant tester le script avec ./wschanged (placez-vous dans le même répertoire que l'exécutable). Vous pouvez également maintenant définir l'exécution de la commande au démarrage.

0
dsSTORM