Поиск/замена значков апплета NetworkManager?

Если вы используетеbusybox(встроенные дистрибутивы, т.е. OpenWRT, LEDE ), искомый переключатель — -eдля версий до 1.26.2 и --full-timeдля 1.27.0 и выше (см. коммит , который его изменил).

1
08.12.2020, 20:16
1 ответ

НАКОНЕЦ-ТОразобрался! По крайней мере, в некоторой степени... есть еще кое-что, чего я не совсем понимаю, и это делает получение окончательных цветов правильными немного сложными. Но я смог внести изменение и подтвердил, что оно работает на двух разных дистрибутивах с Cinnamon :Fedora 33 и Mint 19.3. Если другие, обладающие лучшими знаниями, хотят заполнить пробелы или опубликовать лучший ответ, то обязательно сделайте это.

ВНИМАНИЕ :ЭТОТ ПРОЦЕСС, ВОЗМОЖНО, СЛИШКОМ СОВРЕМЕНЕН ДЛЯ НОВИЧКОВ/ТЕХ, С НИЗКИМ ТЕХНИЧЕСКИМ ПОДГОТОВЛЕНИЕМ. ПРОГРАММИРОВАНИЕ НЕ ТРЕБУЕТСЯ, НО НАЦЕЛЕНО НА БОЛЬШУЮ МОЩНОСТЬ -ПОЛЬЗОВАТЕЛИ/ТВИКЕРЫ. Если вы принимаете на себя риск и не возражаете против «аннулирования гарантии» ; -)... в последнем разделе есть команды, которые я использовал для получения значков на скриншоте.

colored NetworkManager icons for wired & vpn-connected

Я собираюсь ограничить этот ответ, изменив значок NetworkManager для темы значка Adwaita на Cinnamon DE, потому что я ленив и не хочу тестировать все, много, много,множество комбинаций апплета/состояния/размера панели/темы значков/среды рабочего стола/версии/разрешения/дистрибутива/и т. д.

Зависимости:

  • ImageMagick для инструмента преобразования (cli )или Pinta/Krita/Gimp/что угодно (, если вы хотите сделать это в графическом интерфейсе)
  • Gpick (необязателен, но удобен для определения точного цвета отображаемых значков панели)

Обзор:

  • У вас должно быть общее представление о том, как взаимодействуют темы значков. Главное, о чем следует помнить, это то, что Linux/Gnome/GTK следуют стандартам freedesktop, которые проверяют несколько папок, а затем возвращаются к нескольким темам из всех этих папок. Я не собираюсь вдаваться в подробности здесь, но этот пост довольно хорошо описывает это. Для моих целей мы просто сосредоточимся на системном пути /usr/share/iconsи пользовательском пути ~/.local/share/icons. Если вы знаете имя интересующего вас значка, вы можете увидеть, как система преобразует его в путь к файлу, вызвав API GTK. Есть также несколько очень удобных скриптов на Python, которые принимают имя значка в качестве аргумента и выполняют этот поиск для вас, который вы можете найти в этом посте --, включая модифицированную версию, которую я написал сам.

  • Теперь, когда вы знаете (по крайней мере теоретически )где и как появляются значки и как найти путь к значку, вам нужно знать какие имена значков используются апплетом и каким апплетом. Эта часть тоже немного сложная. По сути, они определены в коде апплета. Для Cinnamon DE вы можете найти его апплеты в разделе /usr/share/cinnamon/applets, и хотя они написаны в форме javascript, документация несколько устарела и ее трудно найти. Однако на самом деле вам не нужно разбираться в деталях кода апплета, чтобы найти имена значков. Сейчас,вы можете увидеть файл с именем metadata.json, который содержит имя значка, но прежде чем вы возбудитесь -это только указание значка, используемого в графическом интерфейсе загрузки Cinnamon Spices / Applet -, а не значка, который апплет фактически использует на панели задач. Как я уже сказал, фактические имена значков будут определены в исходном коде апплета. Для апплета NetworkManager под Cinnamon это /usr/share/cinnamon/applets/network@cinnamon.org/applet.js, о котором я упоминал в OP. Если вы начнете искать значки, в этом вы увидите ТОННУ имен значков для всех различных состояний Wi-Fi, состояний офлайн/отключено/подключено и типов устройств (Wi-Fi, проводной, vpn, сотовый -сеть/широкополосный доступ /что угодно ). Другие апплеты, вероятно, будут намного проще, но это зависит от апплета. Большинство основных имен значков для этого апплета определены в функции _updateIcon, которая в моей копии начинается со строки 2205. Затем вы можете подключить их к упомянутому выше скрипту Python, чтобы получить некоторые пути:get-icon-path.py network-vpn.

  • Теперь вот еще одна часть, которая долгое время ставила меня в тупик. Gnome/Gtk/Cinnamon имеют 2 основных типа иконок. Есть обычные значки, которые также известны как полноцветные значки, и так называемые «символические» значки (, как правило, монохромные ). Долгое время у меня сложилось впечатление, что символические изображения были на 100% черно-белыми без цвета, но это не так. Я также ошибочно думал, что единственный способ получить цветные значки на панели задач — это каким-то образом погрузиться в мир пользовательских файлов css / настроек javascript, чтобы сильно изменить мою тему. Я уверен, что это дало бы лучшие результаты, но я не хотел проходить курс по тематике ОС или делать на этом карьеру; Я просто хотел изменить некоторые основные цвета и перейти к более крупным вещам. Поэтому, когда вы ищете значки, вы на самом деле получите совпадения как для get-icon-path.py network-vpn, так и для get-icon-path.py network-vpn-symbolic. Я не совсем понимаю все сценарии, в которых один используется вместо другого;Я полагаю, что мне придется посвятить некоторое время подробному чтению документации freedesktop.org/Gnome для этого. Но для своих изменений я настроил значки network-vpn-symbolicи network-wired-symbolic(, а также несколько промежуточных/ошибочных состояний ).

  • После того, как вы выбрали точные файлы значков для изменения, вы можете продолжить и создать копии в ~/.local/share/icons/<theme>. В моем случае <theme>это Adwaita. Кроме того, ваши «Настройки панели», вероятно, здесь не имеют значения :мой сказал, что у меня высота панели «32» и размер символического значка «28 пикселей» (, а мое разрешение 1920x1080, если это имеет значение ). Я думал, что это повлияет на размер значка и в конечном итоге потратит много времени на поиск больших размеров значков и масштабируемых векторных изображений svg... но на самом деле доказал, что это работает для меня, был файл png 16x16 для сети -телеграфировал, что я бросил в папку по прихоти. Я также понял, что хотя /usr/share/icons/Adwaita/16x16НЕ имеет сети -vpn, вы можете изменить размер одного из других значков, поместив его в соответствующую папку, и он будет подхвачен.

  • Последняя проблемная часть, которую я до сих пор не совсем понимаю, это то, как устанавливается окончательный отображаемый цвет. Кажется, что в ОС есть некоторые промежуточные стили, которые изменяют цвет по сравнению с тем, что я сохранил в файлах значков png, но это не так просто вычислить, как добавить/вычесть некоторое смещение. В основном я добился того, что у меня есть, методом проб и ошибок.

Мои настройки

Мои системные настройки/темы (для справки)

Атрибут Федора 33 Новый 19,3
Версия с корицей v4.8.6 -1 v4.4.8
Версия NetworkManager v1.26.6 -1 v1.10.14
Темы :Граница окна Мятный -Ж -Темный Как новый -Y
Темы :Значки Мятный -Желтый -Темный -Цвет морской волны Как новый -Y
Темы :Элементы управления Мятный -Желтый -Темный -Цвет морской волны Как новый -Y
Темы :Указатель мыши Адвайта ДМЗ -Белый
Темы :Рабочий стол Мятный -Желтый -Темный -Цвет морской волны Мятный -Ж -Темный

Вы также заметите, что все они на той или иной стадии наследуются от Адвайты, поэтому Адвайта является наименьшим общим знаменателем, на который я ориентируюсь. Но для системного трея я думаю, что он будет основан на вашей теме Icon (unverified ).

$ cd /usr/share/icons
 
$ grep Inherit Mint-Y-Dark-Aqua/index.theme 
  Inherits=Mint-Y-Dark,Adwaita,gnome,hicolor
 
$ grep Inherit Mint-Y-Dark/index.theme 
  Inherits=Mint-Y,Adwaita,gnome,hicolor
 
$ grep Inherit Mint-Y/index.theme 
  Inherits=Adwaita,gnome,hicolor

Таблица цветов

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

Цвет ImageMagick в файле png цвет отображаемого значка (в соответствии с gpick)
DeepSaffron #ff9933 темно-фиолетовый #3d1660
Голубой #00fee1 светло-оранжевый #c8995e
Красный #ff0000 средне-зеленый #4e9a06
Зеленый #00ff00 оранжевый #f5793e
Синий #0000ff темно-красный #cc0000
Черный #000000 белый #ffffff
Белый #ffffff черный? #111647
Желтый #ffff00 темно-фиолетовый #441446
Розовый #ff00ff средне-зеленый #1b9c08
Тан? #0000ff темно-красный #cb9ae5
золото (золото)темно-фиолетовый #452964
серый (серый)светло-фиолетовый #890ca7
Зеленый (Зеленый)бледно-оранжевый/розовый #f9bb9e
Желто-коричневый (Желто-коричневый)зеленый #4ac21e
Коричневый (Коричневый)золото?#827014
Голубой (Голубой)оранжевый #c27b40
Пурпурный (Пурпурный)зеленый #1b9c08
желто-зеленый #говядина00 фиолетовый #713691
темно-фиолетовый #441446 оранжевый #c19367
голубой #5294e2 светло-зеленый #92b372
темно-розовый #441446 светло-фиолетовый #6253d2
светло-фиолетовый #6253d2 светло-зеленый #8ddb8f
средний синий #6689af ярко-зеленый #8fe085
сине-зеленый? #0f808f красный #d22600
??? #ff0ff0 темно-зеленый #1da30b
??? #ff0f0f средний синий #fa83ec
??? #ff000a светло-синий #c490fd
??? #00f000 ярко-оранжевый #f58049
??? #000fff очень бледно-голубой #cbf9f5

Воссоздание моих иконок со скриншота

Это просто покажет фактические команды, используемые для двух определенных значков менеджера сети -. Это на жестком -проводном настольном ПК, поэтому у меня нет Wi-Fi, и я действительно заинтересован только в том, чтобы сразу увидеть, подключен ли мой VPN или я в сети без VPN. Поскольку я уже рассказал, как найти значки в обзоре,это будет просто описание того, как воссоздать то, что я сделал на скриншоте выше.

Если у вас есть другие темы значков в ~/.local/share/icons, переименуйте их, чтобы у вас не возникало конфликтов во время теста. Вы можете переместить его обратно/объединить позже (У меня было такое, и мне потребовалось некоторое время, чтобы понять, что происходит):mv ~/.local/share/icons ~/.local/share/icons.$(date +'%Y-%m-%d-%H%M%S').bak

# create directories
mkdir -p ~/.local/share/icons/Adwaita/16x16/devices;
mkdir -p ~/.local/share/icons/Adwaita/16x16/status;
 
# check what icons you have on your system
# for python script, see linked post above
get-icon-path.py network-vpn network-wired network-vpn-symbolic network-wired-symbolic
 
# OR alternately, you could run something like
# but this won't consider theme inheritance or user-folders
find /usr/share/icons/Adwaita /usr/share/icons/gnome \( -iname '*network-vpn*.png' -o -iname '*network-wired*.png' \) -not \( -iname '*acquir*' -o -iregex '.*/legacy/.*' -o -iname '*route*' -o -iname '*offline*' -o -iname '*disconnected*' \)|sort;
 
# recolor the default 16x16 network-wired icon
cd ~/.local/share/icons/Adwaita/16x16/devices;
f="/usr/share/icons/Adwaita/16x16/devices/network-wired-symbolic.symbolic.png";
c='cyan';convert "${f}" -fuzz 20% -fill ${c} +opaque none "$(basename "${f}")";
 
# no 16x16 icon is provided for network-vpn
# so recolor and resize the 64x64 network-vpn icon
cd ~/.local/share/icons/Adwaita/16x16/status;
f="/usr/share/icons/Adwaita/64x64/status/network-vpn-symbolic.symbolic.png";
c='#6689af';convert "${f}" -resize 16x16 -fuzz 20% -fill ${c} +opaque none "$(basename "${f}")";
 
# restart cinnamon desktop (or alternately, just log out then back in)
cinnamon --replace --clutter-display=:0 2> /dev/null &
 

Обновление :До сих пор я запускал вышеуказанные команды на 2 экземплярах Mint 19.3 и 1 экземпляре Fedora 33 без проблем. Но на моем третьем экземпляре Mint 19.3 я заметил, что значки, которые я перечислил выше (, например. network-vpn-symbolic.symbolic.pngне существовало, а network-vpn.pngсуществовало ). В этом случае рекомендуется использовать скрипт Python, о котором я упоминал ранее, и искать имена значков network-vpnи network-vpn-symbolic; если у вас есть символическое использование, если нет, используйте обычное. Если у вас есть значок по умолчанию размером 16x16 -, вы можете использовать первую команду преобразования (без -изменения размера ); если нет, то выберите значок по умолчанию с самым высоким разрешением, который у вас есть (256, 128 или 64, обычно )и используйте вторую команду преобразования (с -изменением размера ).

Обновление 2 :Также обратите внимание, что скрипт get -icon -path.py некорректно работает в сеансах ssh (и, возможно, в других не -графических сеансах ). Я подозреваю, что это потому, что вам нужен X11/графический сеанс для запроса.

2
18.03.2021, 22:44

Теги

Похожие вопросы