web-dev-qa-db-ja.com

xfceでワークスペーススイッチの視覚的なフィードバックを取得する

Ubuntuに固有のものではないため、これがこのサイトに適切な質問であるかどうかはわかりません。おそらくそうではないと思う人は、私の nixおよびLinuxスタック交換サイトのクロスポスト に応答すべきではないでしょう。混乱して申し訳ありませんが、私はまだこれらのサイト(およびsuperuser.com、私は クロスポスト )の間の境界線を交渉しています。私たちはすべてだと思います。

私はワークスペースを多用し、それらの多くを持っています(6x4グリッド)。私は通常、openboxを実行しますが、現在はopenboxがセットアップされていないマシンを使用しています。そのため、xfceを使用しています。ワークスペースを切り替えるときに視覚的なフィードバックを取得することに慣れてきたので、移動したばかりのワークスペースを表示し、xfceで少し混乱していることに気付きました。 openboxでは、これは大きなヘッドアップディスプレイであり、非常に理想的です。ワークスペース切り替えパネルアプレットがアクティブなワークスペースを強調表示することは承知していますが、これはデスクトップスペースが表示されているワークスペースでのみ機能するようです。通常、すべてのウィンドウが最大化されているため、これはあまり役に立ちません。

Xfceでワークスペースを切り替えるときに、新しいワークスペースを示す視覚的なフィードバックを有効にする方法はありますか?

7
intuited

ワークスペースの切り替えアクションに関する通知を示す小さなコードを書きました。このコードにはlibnotifyとlibwnckが必要です

コンパイルするには、次のコマンドを使用します。

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

上記のコマンドでコンパイルエラーが見つかった場合は、次のコマンドを試してください。

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

端末からテストするには:./wsnd

XFCEスタートアップアプリケーションとして含める:XFCEでは、settings-manager-> session and startup-> Application Autostartのスタートアップアプリケーションとして追加する必要があります。

コード:

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

Isaac Pessoaの回答を自分の好みに合わせて修正しました。ワークスペースの変更に関する通知を表示する代わりに、ワークスペース切り替えウィジェットを備えた非表示のXfceパネルを簡単に表示します。

ワークスペースを切り替えると、次のようになります。 example

このファイルを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;
}

次に、画面の端の任意の場所に新しいXfceパネルを作成し、自動非表示に設定します。ワークスペース切り替えウィジェットを追加します。パネル設定ウィンドウのドロップダウンメニューに表示されるパネル番号を書き留めます。

ホームディレクトリに.workspace-changedファイルを作成し、<P_NUMBER>を作成したパネル番号に置き換えます。このファイルが実行可能であることを確認してください! (chmod + x .workspace-changed

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

今すぐコンパイル:

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

端末でテストして(./ wschanged)、すべてが正しく見えることを確認します。満足したら、プログラムをXfce起動アプリケーションとして追加します:設定->セッションと起動->アプリケーション自動起動。

2
zspotter

ワークスペースの切り替えに反応するこの小さなpython3コードブロックがあります。

通知を表示するためではなく、クロムの再描画バグを回避するために作成されています。ワークスペースの切り替えで発生させたいことがあれば、「fire_the_kludge」関数に簡単に投入できます。

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

以下に、libnotify2を使用してワークスペースを通知する例を修正しました。

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

私が考えることができる唯一のことは、デスクトップごとに別々の壁紙を使用することです(これは可能だと思いますが、毎日xfceを使用しないので確認できません)。 compizの使用を気にしない場合は、xfwmと installing ワークスペース名プラグインのように動作するように構成できます。これにより、切り替え時に各ワークスペースの名前を表示できます。

1
RolandiXor

上記のconkyスクリプトにわずかな変更を加えました

これにより、XFCEの下で数値の透明性が確保され、フォントサイズを変更することもできます。また、正しい変数を使用してワークスペースIDを表示します

# 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

Conkyをインストールできます

これをファイルに保存...

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

xfceで実行します。 (端末)-> conky -c/path/to/file&

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

デスクトップを切り替えるたびに、デスクトップの番号が画面に表示されます。

「alignment bm」値はデスクトップの配置を制御します。 bmはボトムミドルです。

DOCについては http://conky.sourceforge.net/docs.html をご覧ください。

1
Habitual

これはまさに私が探していたものです。アイザックペソアとzspotterに感謝します! XfceをArchで使用していますが、最小限に抑えるという精神で、Compizのインストールに頼りたくありませんでした。

これが他の誰かに起こるかどうかはわかりませんが、かなり奇妙なことに気付きました:ワークスペースインジケーターとして設定したパネルは、3行を表示するように構成されています(9台のデスクトップがあります)。これは、Ubuntuで取得するサイズとほぼ同じサイズに設定されました(約3x6インチ)。ただし、パネルを右クリックしてプロパティを選択するまで、1行しか表示されません(明確には、ワークスペーススイッチャーのプロパティウィンドウを表示します)。修正は、別のパネルにあるワークスペーススイッチャーを削除することでした。

また、ワークスペースインジケーターパネルが自動的に非表示になるまでの表示時間を変更するには、これを.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"

ここにあります

私の場合、私はArchにいるので、gtkrc-2.0ファイルは存在しません。 〜/ .themes/[theme name here]ディレクトリのgtkrcファイルに追加する必要がありました。

Popup-delayとpopdown-delayをお好みに変更します。なんらかの奇妙な理由で、私は値を望みの約半分に設定しなければなりませんでした。おそらく、スクリプトを実行するwschangedと関係があります。

ワークスペースのグリッドを表示するパネルを画面の中央に配置する場合(Ubuntuと同様)、パネルのアルファを(パネル設定の外観タブの下に)ずっと下に設定する必要があります。これにより、すべてのウィンドウの上部に小さなバーが表示されなくなります。 autohide-sizeの値を1に設定すると、そのパネルが誤って表示されることはほとんど不可能になります。

最後に、ワークスペースを切り替えているときにカーソルがパネルの上部にあると、ツールヒントがランダムに表示され、カーソルをパネルから移動して非表示にする必要があります。大したことではありません。

編集:これにはzspotterの修正を使用しました。

編集:デスクトップに焦点を合わせたままマウスをスクロールすると、ワークスペースが切り替わることに気付きました(zspotterの修正を使用)。いいね!

編集:これにより、通知ボリューム(ボリュームキーなどの使用時)が間違った場所に表示されます。具体的には、オプションを左上または右上に使用すると、通知は左中または右に表示されます。 osd-notifyがインストールされていません-xfce4-notifydだけです。設定のすべてが正しいように見えました。パネルを削除し、wschangedをアプリケーションの自動開始リストから削除すると、問題は修正されました。

1
brciii

答えのほとんどは5年前​​のもので、xubuntu 18.04の時点ではもう機能しません。 18.04で実行されるzspotterの回答の更新バージョンをまとめました。簡単にするために、すべてのファイルはホームディレクトリにあると仮定します。スクリプトを別のフォルダーに簡単に適合させることができます。

まず、次の内容の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;
}

次に、画面の端の任意の場所に新しいXfceパネルを作成し、自動非表示に設定します。ワークスペース切り替えウィジェットを追加します。パネル設定ウィンドウのドロップダウンメニューに表示されるパネル番号をメモします。この例では、パネル番号は2であり、それに応じて調整します。

第三に、ここで物事が異なってきます、このコンテンツでwschanged.shと呼ばれる同じフォルダーに別のスクリプトを作成します(右クリック->プロパティ->実行可能として設定、または端末でchmod +x .wschanged.sh ):

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

パネルには自動非表示プロパティはありませんが、自動非表示動作プロパティがあるため、スクリプトの調整があります。

4番目に、.cファイルをコンパイルする必要があります。以前の回答のコマンドは、 here が使用するように、もう機能しません:

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

エラーが発生した場合は、Sudo apt install libwnck-3-devを指定してlibwnck-3-devをインストールしてください。

これで、./wschangedを使用してスクリプトをテストできます(実行可能ファイルと同じディレクトリに配置します)。起動時にコマンドを実行するように設定することもできます。

0
dsSTORM