5 сентября 2015 Как я перешёл на XFCE

Перевод: en

Мне действительно очень нравится Гном 3 за внешний вид и удобство. На самом деле, я разными версиями Гнома пользовался, как минимум, со времён 1.2, когда ещё в качестве оконного менеджера с ним шёл Enlightenment. Однако, после недавнего обновления до 22ой Федоры, многие вещи начали слишком уж раздражать. Например, иногда им начинает съедаться 100% одного из ядер процессора, иногда расширения самопроизвольно выгружаются, и некоторые привычные расширения так и не оказываются обновлёнными до текущей версии Гнома, и дисплейный менеджер зачем-то постоянно загружен, и т.д. Это всё сподвигло меня наконец-то переключиться на нечто более простое и лёгкое.

Я и так уже пользовался xfce4-panel в качестве сайдбара под Гномом, так что перейти именно на XFCE было логичным. Здесь я постарался воссоздать привычное окружение, с примерно следующим результатом:

top, запущенный в gnome-terminal, и Midnight Commander с темой xoria256, запущенный в xterm

top, запущенный в gnome-terminal, и Midnight Commander с темой xoria256, запущенный в xterm

ещё пара скриншотов и кучка патчей

тема GTK Ceti-2 и список апплетов с верхней панели

тема GTK Ceti-2 и список апплетов с верхней панели

Используется тема Ceti-2, слегка подправленная с целью уменьшения отступов в табах и замены шрифта на панелях:

diff -u -r Ceti-2.orig/gtk-2.0/gtkrc Ceti-2/gtk-2.0/gtkrc
--- Ceti-2.orig/gtk-2.0/gtkrc       2015-09-05 23:07:25.158255238 +0600
+++ Ceti-2/gtk-2.0/gtkrc    2015-09-04 00:10:27.000000000 +0600
@@ -16,7 +16,7 @@
   GtkWidget::focus-line-width = 1
   GtkMenuBar::window-dragging = 1
   GtkToolbar::window-dragging = 1
-  GtkToolbar::internal-padding = 4
+  GtkToolbar::internal-padding = 0
   GtkToolButton::icon-spacing = 4

   GtkWidget::tooltip-radius = 2
diff -u -r Ceti-2.orig/gtk-2.0/panel.rc Ceti-2/gtk-2.0/panel.rc
--- Ceti-2.orig/gtk-2.0/panel.rc    2015-09-05 23:05:12.411546816 +0600
+++ Ceti-2/gtk-2.0/panel.rc 2015-08-31 22:41:08.000000000 +0600
@@ -1,6 +1,9 @@
+gtk-icon-sizes = "panel-tasklist-menu=64,64"
+
 style "theme-panel" {

   ythickness = 0
+  font_name = "RobotoAC Bold 9"

   bg[NORMAL] = "#2D3136"
   bg[ACTIVE] = shade(0.9, "#2D3136")
@@ -44,6 +47,8 @@

 style "panelbuttons" {

+  font_name = "RobotoAC Bold Condensed 10"
+
   xthickness = 4
   ythickness = 3

@@ -55,6 +60,8 @@
     gradient_shades = {1.0,0.9,0.9,0.8}
     border_shades = { 0.6, 0.6 }
   }
+
+  XfceTasklist::max-button-size = 32
 }

 style "theme-panel-text" {

После применения вышеприведённого фикса internal-padding'а, тулбар и табы редактора в Эклипсе выглядят почти нормально:

развёрнутое и раздекорированной окно Эклипса с табами почти нормального размера

развёрнутое и раздекорированной окно Эклипса с табами почти нормального размера

Шрифт на панелях и заголовках окон — Roboto от Гугла, вручную (с помощью fontforge) сконвертированный в all-caps. Модифицированные шрифты я выложил сюда.

Кроме того, для улучшения внешнего вида, пришлось подправить код апплетов: добавил отступы мониторов производительности, изменил шрифты и цвета клавиатурных индикаторов, сделал иконку громкости белой вместо тёмно-серой. До некоторые из этих настроек, возможно, можно было добраться с помощью темы, но некоторые другие захардкожены, так что патчить всё равно бы пришлось. Я банально заменил одни захардкоженные значения на другие, так что код всё равно страшен, но, хотя бы, апплеты теперь вписываются в общую тему визуально:

diff -u -r xfce4-kbdleds-plugin-0.0.6.orig/panel-plugin/kbdleds.c xfce4-kbdleds-plugin-0.0.6/panel-plugin/kbdleds.c
--- xfce4-kbdleds-plugin-0.0.6.orig/panel-plugin/kbdleds.c  2011-10-13 22:51:23.000000000 +0700
+++ xfce4-kbdleds-plugin-0.0.6/panel-plugin/kbdleds.c       2015-09-01 00:07:03.000966168 +0600
@@ -220,7 +220,7 @@
 gboolean kbdleds_update_state(gpointer data) {
     int i;
     gchar *str;
-    gchar *template_on="<span background=\"#00ff00\" foreground=\"#000000\">%c</span>";
+    gchar *template_on="<span background=\"#ffffff\" foreground=\"#000000\">%c</span>";
     gchar *template_off="%c";
     gchar *tempstr[NUM_LEDS];
     gchar *templates[NUM_LEDS];
diff -u -r xfce4-pulseaudio-plugin-0.2.3.orig/panel-plugin/pulseaudio-button.c xfce4-pulseaudio-plugin-0.2.3/panel-plugin/pulseaudio-button.c
--- xfce4-pulseaudio-plugin-0.2.3.orig/panel-plugin/pulseaudio-button.c     2015-05-04 02:52:14.000000000 +0600
+++ xfce4-pulseaudio-plugin-0.2.3/panel-plugin/pulseaudio-button.c  2015-09-01 20:18:10.908803274 +0600
@@ -137,7 +137,7 @@

   /* Setup Gtk style */
   css_provider = gtk_css_provider_new ();
-  gtk_css_provider_load_from_data (css_provider, "#pulseaudio-button { -GtkWidget-focus-padding: 0; -GtkWidget-focus-line-width: 0; -GtkButton-default-border: 0; -GtkButton-inner-border: 0; padding: 1px; border-width: 1px;}", -1, NULL);
+  gtk_css_provider_load_from_data (css_provider, "#pulseaudio-button { -GtkWidget-focus-padding: 0; -GtkWidget-focus-line-width: 0; -GtkButton-default-border: 0; -GtkButton-inner-border: 0; padding: 1px; border-width: 1px; color: #ffffff; }", -1, NULL);
   gtk_style_context_add_provider (GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (button))), GTK_STYLE_PROVIDER (css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

   /* Intercept scroll events */
diff -u -r xfce4-xkb-plugin-0.7.1.orig/panel-plugin/xkb-cairo.c xfce4-xkb-plugin-0.7.1/panel-plugin/xkb-cairo.c
--- xfce4-xkb-plugin-0.7.1.orig/panel-plugin/xkb-cairo.c    2015-02-28 03:53:11.000000000 +0600
+++ xfce4-xkb-plugin-0.7.1/panel-plugin/xkb-cairo.c 2015-09-01 21:20:52.883016118 +0600
@@ -31,7 +31,7 @@
 #include <librsvg/rsvg-cairo.h>
 #endif

-#define XKB_PREFERRED_FONT "Courier New, Courier 10 Pitch, Monospace Bold"
+#define XKB_PREFERRED_FONT "RobotoAC Bold 9"

 #define xkb_cairo_arc_for_flag(cr, x, y, r, a1, a2) \
     xx = layoutx + width - 12 + x; \

Панель xfce4-panel также была пропатчена, чтобы позволить сделать широкий сайдбар и более крупные иконки в списке задач:

diff -u -r xfce4-panel-4.12.0.orig/panel/panel-itembar.c xfce4-panel-4.12.0/panel/panel-itembar.c
--- xfce4-panel-4.12.0.orig/panel/panel-itembar.c   2014-04-25 03:16:37.000000000 +0700
+++ xfce4-panel-4.12.0/panel/panel-itembar.c        2015-08-23 17:19:45.000000000 +0600
@@ -193,7 +193,7 @@
                                    PROP_SIZE,
                                    g_param_spec_uint ("size",
                                                       NULL, NULL,
-                                                      16, 128, 30,
+                                                      16, 256, 30,
                                                       EXO_PARAM_WRITABLE));

   g_object_class_install_property (gobject_class,
diff -u -r xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog.glade xfce4-panel-4.12.0/panel/panel-preferences-dialog.glade
--- xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog.glade    2015-02-27 02:32:17.000000000 +0600
+++ xfce4-panel-4.12.0/panel/panel-preferences-dialog.glade 2015-08-23 16:21:07.000000000 +0600
@@ -73,7 +73,7 @@
     <object class="GtkAdjustment" id="size">
     <property name="value">16</property>
     <property name="lower">16</property>
-    <property name="upper">128</property>
+    <property name="upper">256</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
diff -u -r xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog-ui.h xfce4-panel-4.12.0/panel/panel-preferences-dialog-ui.h
--- xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog-ui.h     2015-02-28 22:22:40.000000000 +0600
+++ xfce4-panel-4.12.0/panel/panel-preferences-dialog-ui.h  2015-08-23 16:21:22.000000000 +0600
@@ -28,7 +28,7 @@
   "id=\"0\" translatable=\"yes\">Background image</col></row></data></obje"
   "ct><object class=\"GtkAdjustment\" id=\"size\"><property name=\"value\""
   ">16</property><property name=\"lower\">16</property><property name=\"up"
-  "per\">128</property><property name=\"step_increment\">1</property><prop"
+  "per\">256</property><property name=\"step_increment\">1</property><prop"
   "erty name=\"page_increment\">10</property></object><object class=\"GtkA"
   "djustment\" id=\"length\"><property name=\"value\">25</property><proper"
   "ty name=\"lower\">1</property><property name=\"upper\">100</property><p"
diff -u -r xfce4-panel-4.12.0.orig/panel/panel-window.c xfce4-panel-4.12.0/panel/panel-window.c
--- xfce4-panel-4.12.0.orig/panel/panel-window.c    2015-02-28 20:52:27.000000000 +0600
+++ xfce4-panel-4.12.0/panel/panel-window.c 2015-08-23 17:19:38.000000000 +0600
@@ -392,7 +392,7 @@
   g_object_class_install_property (gobject_class,
                                    PROP_SIZE,
                                    g_param_spec_uint ("size", NULL, NULL,
-                                                      16, 128, 48,
+                                                      16, 256, 48,
                                                       EXO_PARAM_READWRITE));

   g_object_class_install_property (gobject_class,
diff -u -r xfce4-panel-4.12.0.orig/plugins/tasklist/tasklist-widget.c xfce4-panel-4.12.0/plugins/tasklist/tasklist-widget.c
--- xfce4-panel-4.12.0.orig/plugins/tasklist/tasklist-widget.c      2015-02-27 02:32:17.000000000 +0600
+++ xfce4-panel-4.12.0/plugins/tasklist/tasklist-widget.c   2015-09-05 22:35:33.794372013 +0600
@@ -46,7 +46,7 @@

 #define DEFAULT_BUTTON_SIZE          (25)
 #define DEFAULT_MAX_BUTTON_LENGTH    (200)
-#define DEFAULT_MENU_ICON_SIZE       (16)
+#define DEFAULT_MENU_ICON_SIZE       (32)
 #define DEFAULT_MIN_BUTTON_LENGTH    (DEFAULT_MAX_BUTTON_LENGTH / 4)
 #define DEFAULT_ICON_LUCENCY         (50)
 #define DEFAULT_ELLIPSIZE_MODE       (PANGO_ELLIPSIZE_END)
@@ -2449,7 +2449,7 @@
     return;

   /* get the window icon */
-  if (tasklist->show_labels)
+  if (0 && tasklist->show_labels)
     pixbuf = wnck_window_get_mini_icon (window);
   else
     pixbuf = wnck_window_get_icon (window);
@@ -3495,7 +3495,7 @@
     return;

   /* get the class group icon */
-  if (group_child->tasklist->show_labels)
+  if (0 && group_child->tasklist->show_labels)
     pixbuf = wnck_class_group_get_mini_icon (class_group);
   else
     pixbuf = wnck_class_group_get_icon (class_group);

В общем, результатом я вполне доволен. Вот, для сравнения, скриншот до, с использованием третьего Гнома:

Гном с аналогичными настройками

Гном с аналогичными настройками

Разница по сравнению со скриншотами после не так велика, но в этом и была вся задумка.