tl;dr - NetworkManager 애플릿에서 어떤 아이콘을 사용하여 사용자 정의 아이콘으로 바꿀 수 있는지 어떻게 확인합니까?
일반화하다
내 홈 패널/작업 표시줄/시스템 트레이 영역(OS를 설치할 때 거기에 있음)에 NetworkManager 애플릿이 있고 여러 VPN 연결을 추가했습니다. 연결하면 모든 것이 잘 작동하지만 기본 아이콘이 마음에 들지 않아 어두운 배경에서 더 눈에 띄는 아이콘으로 바꾸고 싶었습니다. 밝은 녹색(VPN) 및 자홍색(유선/비VPN)의 사용자 정의 아이콘으로 대체할 수 있도록 어떤 아이콘이 사용되고 있는지 찾으려고 노력했지만 성공하지 못했습니다.
다음은 교체하려는 기본 아이콘의 스크린샷입니다.
시스템 세부정보
나는 여러 대의 컴퓨터/파티션을 가지고 있으며 여러 배포판에서 이것을 시도했습니다. 관련된 모든 배포판에서 동일한 테마 설정과 동일한 DE를 사용합니다.
DE: Cinnamon(모든 버전에서 동일) Distro: Fedora 33, LMDE-4, Linux Mint 19.3 테마: 창 테두리: Mint-Y Dark, 아이콘 및 데스크탑: Mint-Y Dark Aqua, 마우스 포인터: Adwaita
내 배포판 중 하나에서 테스트하게 되어 기쁩니다. 하지만 페도라에 썼기 때문에 :
$ uname -r
5.9.11-200.fc33.x86_64
$ dnf list NetworkManager|grep NetworkManager
NetworkManager.x86_64 1:1.26.4-1.fc33 @updates
$ dnf list cinn*|grep -P '^cinnamon\.x|menus\.x'
cinnamon.x86_64 4.6.7-1.fc33 @anaconda
cinnamon-menus.x86_64 4.6.1-2.fc33 @anaconda
다른 정보가 필요하면 알려주세요.
내가 지금까지 시도한 것
대부분의 시스템 아이콘이 어디에 있는지 알고 있습니다
/usr/share/icons
. 여기에서 nemo 파일 관리자를 열고 유사해 보이는 파일 관리자를 찾으려고 수동으로 둘러보았지만 눈으로 확인해야 하거나 뭔가 빠졌습니다. 하나 있다많은세상에는 사진이 많아서 "network*"나 "nm-*"로 시작하는 것에 주의를 기울여도 쉽게 놓칠 수 있습니다...위의 방법으로 찾은 줄 알았는데,
/usr/share/icons/Mint-Y/status/symbolic/status-nm-device-wired-secure-symbolic.svg
색상 코드를 녹색(sudo sed -Ei "s/(bebebe|d3dae3)/00994c/g" status-nm-device-wired-secure-symbolic.svg
)으로 수정하고 컴퓨터를 다시 시작해도 애플릿은 여전히 예전 색상입니다. 자세히 조사한 결과 이 디렉터리에는 일반/비VPN 유선 연결 아이콘처럼 보이는 어떤 것도 포함되어 있지 않은 것으로 나타났습니다.일부 온라인 검색을 통해 나를 찾았습니다. 아이콘이 어디서 왔는지 알아내기 위해 텍스트 편집기에서 열어 보았습니다. 사용된 많은 규칙(nix가 이름/레이블을 아이콘 파일 경로로 확인하는 방법 포함)을 완전히 이해하지 못했다는 것을 인정합니다. 그래서 저는 본질적으로 태그를 찾고 있으며 태그가 .
/usr/share/cinnamon/applets/[email protected]/applet.js
/usr/share/icons
별도의 표시기 아이콘 애플릿이 있다는 것을 알고 있습니다. 나는 이것을 사용하지 않는 것이 좋습니다. 특히 이미 아이콘이 있는 경우 중복되고 제한된 화면 공간을 낭비하는 것처럼 보입니다.
답변1
마침내알아 냈어! 적어도 어느 정도는...완전히 이해하지 못하는 부분이 더 있어서 최종 색상을 올바르게 만드는 것이 약간 어렵습니다. 하지만 변경을 할 수 있었고 Cinnamon을 실행하는 2개의 다른 배포판(Fedora 33 및 Mint 19.3)에서 작동한다는 것을 확인했습니다. 더 나은 지식을 가진 누군가가 공백을 메우거나 더 나은 답변을 게시하고 싶다면 반드시 그렇게 하십시오.
경고: 이 프로세스는 초보자/기술적 배경이 부족한 사람들에게는 너무 고급 수준일 수 있습니다. 프로그래밍이 필요하지 않지만 고급 사용자/조정자를 대상으로 합니다.위험을 감수하고 "보증 무효화"에 신경 쓰지 않는다면 ;-) ...마지막 부분에는 스크린샷에서 아이콘을 얻는 데 사용한 명령이 포함되어 있습니다.
이 대답은 Cinnamon DE에서 Adwaita 아이콘 테마로 NetworkManager 아이콘을 변경하는 것으로 제한하겠습니다. 저는 게으르고 애플릿/상태/패널 크기/아이콘 테마/의 아주 많고 많은 조합 등 모든 것을 테스트하고 싶지 않습니다. 데스크탑 환경/버전/해상도/릴리스/등.
종속성:
- 변환 도구(cli) 또는 Pinta/Krita/Gimp/기타 도구용 ImageMagick(GUI에서 수행하려는 경우)
- Gpick(선택 사항이지만 표시된 패널 아이콘의 정확한 색상을 쉽게 식별할 수 있음)
개요:
아이콘 테마가 상호 작용하는 방식에 대한 기본적인 이해가 있어야 합니다. 주목해야 할 중요한 점은 Linux/Gnome/GTK가 여러 폴더를 확인한 다음 모든 폴더에서 여러 테마로 돌아가는 freedesktop 표준을 따른다는 것입니다. 여기서는 다루지 않겠습니다만,이 게시물이쁘게 덮어줍니다. 내 목적에 맞게 시스템 경로
/usr/share/icons
와 사용자 경로 에만 중점을 둘 것입니다~/.local/share/icons
. 관심 있는 아이콘의 이름을 알고 있다면 GTK API를 호출하여 시스템이 이를 파일 경로로 확인하는 방법을 확인할 수 있습니다. 아이콘 이름을 인수로 받아들이고 이 조회를 수행하는 매우 편리한 Python 스크립트도 있습니다. 찾을 수 있습니다.이 기사에서——직접 작성한 수정본이 포함되어 있습니다.이제 (적어도 이론상으로는) 아이콘을 어디서, 어떻게 선택하는지, 그리고 아이콘의 파일 경로를 찾는 방법을 알았으니 다음 사항을 알아야 합니다.아이콘 이름이 뭔가요?애플릿에서 사용되는 애플릿과 이를 사용하는 애플릿입니다. 이 부분도 좀 어렵네요. 기본적으로 이는 애플릿 코드에 정의되어 있습니다. Cinnamon DE의 경우 아래에서 해당 애플릿을 찾을 수 있습니다
/usr/share/cinnamon/applets
. 비록 Javascript로 작성되었지만 문서는 약간 오래되어 찾기가 어렵습니다. 그러나 아이콘 이름을 찾기 위해 실제로 애플릿 코드의 세부 사항을 알 필요는 없습니다. 이제 아이콘 이름이 포함된 파일을 볼 수 있지만metadata.json
너무 흥분하기 전에 이것은 Cinnamon Spices/Applet Download GUI에 사용되는 아이콘을 지정합니다.아니요시스템 트레이의 애플릿이 사용하는 실제 아이콘입니다. 앞서 말했듯이 실제 아이콘 이름은 애플릿 소스 코드에 정의됩니다. Cinnamon의 NetworkManager 애플릿의 경우 OP에서 언급한 내용입니다. 아이콘 검색을 시작하면 다양한 Wi-Fi 상태, 오프라인/연결 끊김/연결 상태 및 장치 유형(Wi-Fi, 유선, VPN, 셀룰러/광대역/기타)에 대한 수많은 아이콘 이름이 표시됩니다. 다른 애플릿은 훨씬 간단할 수 있지만 애플릿에 따라 다릅니다. 이 애플릿의 기본 아이콘 이름 대부분은 내 사본의 2205행에서 시작하는 함수에 정의되어 있습니다. 그런 다음 위에서 언급한 Python 스크립트에 이를 삽입하여 일부 경로를 얻을 수 있습니다./usr/share/cinnamon/applets/[email protected]/applet.js
_updateIcon
get-icon-path.py network-vpn
이제 오랫동안 나를 혼란스럽게 했던 또 다른 부분이 있습니다. Gnome/Gtk/Cinnamon에는 2가지 기본 유형의 아이콘이 있습니다. 풀 컬러 아이콘이라고도 하는 일반 아이콘과 소위 "기호" 아이콘(보통 단색)이 있습니다. 오랫동안 나는 상징적인 것들은 100% 흑백이고, 무색인 줄 알았는데, 사실은 그렇지 않았다. 나는 또한 컬러 시스템 트레이 아이콘을 얻을 수 있는 유일한 방법은 사용자 정의 CSS 파일/자바스크립트 조정의 세계로 뛰어들어 내 테마를 크게 수정하는 것이라고 잘못 믿었습니다. 이것이 더 나은 결과를 낳을 것이라고 확신하지만 운영 체제 테마 과정을 듣거나 그것으로 경력을 쌓고 싶지는 않습니다. 단지 몇 가지 기본 색상을 변경하고 더 크고 더 나은 것으로 나아가고 싶을 뿐입니다. 따라서 아이콘을 검색하면 실제로
get-icon-path.py network-vpn
AND match 가 표시됩니다get-icon-path.py network-vpn-symbolic
. 나는 하나를 다른 것 위에 사용하는 모든 시나리오를 완전히 이해하지 못합니다. freedesktop.org/Gnome 문서를 자세히 읽어야 할 것 같습니다. 그러나 변경 사항에 대해서는network-vpn-symbolic
및network-wired-symbolic
아이콘(및 일부 중간/오류 상태)을 사용자 정의했습니다.수정하려는 정확한 아이콘 파일을 식별한 후에는 아래에서 복사본 만들기를 진행할 수 있습니다
~/.local/share/icons/<theme>
. 내가 아는 한<theme>
그것은 이다Adwaita
. 또한 "패널 설정"은 여기서 중요하지 않을 수 있습니다. 내 패널 높이가 "32"이고 기호 아이콘 크기가 "28px"라고 나와 있습니다(중요한 경우 내 해상도는 1920x1080입니다). 나는 이것이 아이콘 크기에 영향을 미치고 더 큰 아이콘 크기와 확장 가능한 svg 벡터 이미지를 찾는 데 많은 시간을 낭비하게 될 것이라고 생각했습니다. 그러나 실제로 나에게 효과가 있었던 것은 웹 와이어용 16x16 png 파일이었습니다. 변덕스럽게 폴더. 또한/usr/share/icons/Adwaita/16x16
네트워크 VPN이 없어도 다른 아이콘 중 하나의 크기를 조정하여 적절한 폴더에 넣으면 선택될 수 있다는 것도 깨달았습니다 .마지막으로 아직도 완전히 이해되지 않는 부분은 최종 표시되는 색상이 어떻게 설정되는지입니다. OS에는 png 아이콘 파일에 저장한 색상을 변경하는 중간 스타일이 있는 것 같지만 계산이 일부 오프셋을 추가/빼는 것처럼 간단하지 않은 것 같습니다. 대부분 시행착오를 거쳐 현재의 위치에 도달했습니다.
내 설정
내 시스템 설정/테마(참고용)
속성 | 페도라 33 | 민트 19.3 |
---|---|---|
계피 버전 | v4.8.6-1 | v4.4.8 |
네트워크 관리자 버전 | v1.26.6-1 | v1.10.14 |
주제: 창 테두리 | 민트색 | 민트-Y |
테마:아이콘 | 민트-Y-다크-아쿠아 | 민트-Y |
주제: 제어 | 민트-Y-다크-아쿠아 | 민트-Y |
주제: 마우스 포인터 | 아드비타 | DMZ-화이트 |
테마: 데스크탑 | 민트-Y-다크-아쿠아 | 민트색 |
또한 이 모든 것이 어떤 단계에서는 Adwaita에서 상속된다는 사실도 알 수 있습니다. 이것이 바로 Adwaita가 내 목표의 가장 낮은 공통 분모인 이유입니다. 하지만 시스템 트레이의 경우 아이콘 테마를 기반으로 할 것이라고 생각합니다(확인되지 않음).
$ 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
색상표
앞서 언급했듯이, 표시되는 최종 아이콘의 색상은 액세스 방법을 모르는 OS의 다른 스타일/테마의 영향을 받거나 지출하려는 금액을 찾으려면 더 많은 노력이 필요합니다. 나와 같은 게으른 사람들을 위해 대부분의 기본 Cinnamon 시스템에서 작동할 수 있는 몇 가지 값은 다음과 같습니다. 다른 모든 분들을 위해 아래에서 이를 달성하는 데 사용한 단계를 간략히 설명하겠습니다. 직접 실험해 보실 수 있습니다.
png 파일의 ImageMagick 색상 | 디스플레이 아이콘 색상(gpick에 따름) |
---|---|
딥 사프란 #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 |
샤르트뢰즈 #beef00 | 보라색 #713691 |
진한 보라색 #441446 | 오렌지 #c19367 |
하늘색 #5294e2 | 밝은 녹색 #92b372 |
다크 핑크 #441446 | 라이트 퍼플 #6253d2 |
라이트 퍼플 #6253d2 | 밝은 녹색 #8ddb8f |
미디엄 블루 #6689af | 밝은 녹색 #8fe085 |
청록색? #0f808f | 빨간색 #d22600 |
??? #ff0ff0 | 진한 녹색 #1da30b |
??? | 미디엄 블루 #fa83ec |
??? | 하늘색 #c490fd |
??? | 밝은 오렌지색 #f58049 |
??? | 아주 연한 하늘색 #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 크기의 기본 아이콘이 있는 경우 첫 번째 변환 명령을 사용할 수 있습니다(-resize 제외). 그렇지 않은 경우 가지고 있는 가장 높은 해상도의 기본 아이콘(일반적으로 256, 128 또는 64)을 선택하고 두 번째 변환 명령( -크기 조정).
업데이트 2: 또한 get-icon-path.py 스크립트가 ssh 세션(및 그래픽이 아닌 다른 세션에서도 가능)에서 제대로 작동하지 않는다는 점에 유의하세요. 쿼리하려면 X11/그래픽 세션이 필요하기 때문인 것 같습니다.