20 marzec 2010

Logo Gentoo w menu KDE

Kategorie:  Linux  KDE  Gentoo

Jak szybko dokonać zmiany standardowego logo w menu KDE na logo Gentoo (lub dowolnej innej dystrybucji).

Wiele dystrybucji jak na przykład Kubuntu zapewnia swoje własne logo, ale moje Gentoo używa domyślnej standardowej ikony oxygen. Po kilku miesiącach używania KDE 4 na moich komputerach, straszliwie znudziła mi się nieco mało fajna standardowa ikona KDE. Poszperałem w Internecie i znalazłem naprawdę sympatycznie wyglądające logo Gentoo w formacie SVG, które wręcz idealnie nadaje się na ikonę menu.

Logo Gentoo Linux w formacie SVG

Zastąpienie starycz ikon wymagana niestety kopiowania nowej ikony w miejsce starych zdecydowanie zbyt dużą ilość razy. Co gorsza jeśli będą używał domyślnego zestawu ikon oxygen, który jest częścią środowiska KDE, mogę stracić moje zmiany przy każdej kompilacji nowego KDE, i znów będę musiał kopiować ikony. Mogę też w przyszłości zdecydować się na lokalną instalację innego zestawu ikon, ale wciąż chciałbym mieć możliwość umieszczenia logo mojego ukochanego Gentoo w menu w jakiś w miarę bez problemowy sposób.

Rozwiązałem ten problem w typowy dla użytkownika Linuxa sposób. Spędziłem kilka minut i napisałem prosty skrypt, który wykona całą robotę za mnie.

Wyświetl kod źródłowy skryptu
  1. ICON=gentoo-start-icon.svg
  2. RESOLUTION=(16x16 22x22 32x32 48x48 64x64 128x128 256x256)
  3. URL="http://gentoo-art.org/CONTENT/content-files/117383-gentoo-start-icon.svg"
  4. WGET=/usr/bin/wget
  5. MV=/bin/mv
  6. CP=/bin/cp
  7. RM=/bin/rm
  8.  
  9. if [ "${1}" = "global" ]; then
  10. PATH="/usr/share/icons/"
  11. elif [ "${1}" = "local" ]; then
  12. PATH=`echo ~/.kde4/share/icons/`
  13. else
  14. echo
  15. echo "Usage ./kde-icon.sh local | global [theme_name] [restore]"
  16. echo
  17. echo "Examples:"
  18. echo "If you want to change the icons just run:"
  19. echo "./kde-icon.sh local OxygenRefit2-black-version"
  20. echo
  21. echo "If you want to restore old icons run:"
  22. echo "./kde-icon.sh local OxygenRefit2-black-version restore"
  23. echo
  24. exit 1
  25. fi
  26.  
  27. if [ "${#}" -eq 1 ]; then
  28. echo "You didn't provide a theme_name I'm assuming we are changing the oxygen default icon theme"
  29. echo
  30. THEME="oxygen"
  31. else
  32. THEME=${2}
  33. fi
  34.  
  35. echo "Checking if full theme path: ${PATH}${THEME} exists"
  36. echo
  37. if [ -d ${PATH}${THEME} ]; then
  38. echo "Path seems ok"
  39. echo
  40. else
  41. echo "Can not find the provided path check script parameters"
  42. echo
  43. exit 1
  44. fi
  45.  
  46. echo "Checking if you have write access to theme path"
  47. echo
  48. if [ -w ${PATH}${THEME} ]; then
  49. echo "Your rights seems ok"
  50. echo
  51. else
  52. echo "You do not have write access to the theme path you will not be able to change the icons"
  53. echo "Maybe you should run the script as root"
  54. echo
  55. exit 1
  56. fi
  57.  
  58. if [ "${3}" == "restore" ] ; then
  59. echo "You requested restoration of previously stored icons"
  60. echo
  61. echo "Checking if stored copies of old icons are available and performing restore if possible"
  62. for i in "${RESOLUTION[@]}";
  63. do
  64. echo processing ${PATH}${THEME}/$i/places/start-here-kde.png
  65. if [ -w ${PATH}${THEME}/$i/places/start-here-kde.png.bak ]; then
  66. if [ -w ${PATH}${THEME}/$i/places/start-here-kde.svg ]; then
  67. echo "Removing svg icon: ${PATH}${THEME}/$i/places/start-here-kde.svg"
  68. ${RM} ${PATH}${THEME}/$i/places/start-here-kde.svg
  69. echo
  70. fi
  71. echo "Restoring old icons"
  72. ${MV} -f ${PATH}${THEME}/$i/places/start-here-kde.png.bak ${PATH}/${THEME}/$i/places/start-here-kde.png
  73. echo
  74. else
  75. echo "Can't find ${PATH}${THEME}/$i/places/start-here-kde.png.bak or you do not have write access to file"
  76. echo
  77. fi
  78. done
  79. echo "Finished"
  80. echo "To see the changes you need to change the icon set using KDE system settings"
  81. echo
  82. else
  83. echo "Downloading the logo icon"
  84. echo
  85. ${WGET} --output-document=${ICON} ${URL} || die "downloading of the icon failed"
  86.  
  87. echo "Making backup of existing icons"
  88. echo
  89. for i in "${RESOLUTION[@]}";
  90. do
  91. echo processing ${PATH}${THEME}/$i/places/start-here-kde.png
  92. if [ -w ${PATH}${THEME}/$i/places/start-here-kde.png ]; then
  93. if (${MV} -f ${PATH}${THEME}/$i/places/start-here-kde.png ${PATH}/${THEME}/$i/places/start-here-kde.png.bak) then
  94. echo "Storing ${PATH}${THEME}/$i/places/start-here-kde.png as ${PATH}/${THEME}/$i/places/start-here-kde.png.bak succsesfull"
  95. echo
  96. else
  97. echo "There was error while storing icon ${PATH}${THEME}/$i/places/start-here-kde.png"
  98. fi
  99. else
  100. echo "Icon ${PATH}${THEME}/$i/places/start-here-kde.png dosn't exist or you don't have the write access to it!"
  101. echo "I have nothing to do here"
  102. echo
  103. fi
  104. done
  105.  
  106. echo
  107. echo "Placing new Icon"
  108. echo
  109. for i in "${RESOLUTION[@]}";
  110. do
  111. echo processing ${PATH}${THEME}/$i/places/start-here-kde.svg
  112. if (${CP} ${ICON} ${PATH}${THEME}/$i/places/start-here-kde.svg) then
  113. echo "Placing icon ${PATH}${THEME}/$i/places/start-here-kde.svg succsesfull"
  114. echo
  115. else
  116. echo "There was error while placing icon ${PATH}${THEME}/$i/places/start-here-kde.svg"
  117. echo
  118. fi
  119. done
  120. echo "I'm Removing the downloaded icon"
  121. ${RM} -f ${ICON}
  122. echo
  123. echo "That's all!"
  124. echo "To see the changes you need to change the icon set using KDE system settings"
  125. echo
  126. fi

Zdaję sobie sprawę, że ten skrypt mógłby być dużo krótszy ale ja lubię wiedzieć co się dzieje, stąd aż tyle komend echo w skrypcie.
Skrypt:

  • pobierze logo z internetu (możesz zmienić url aby pobrać inne logo)
  • sprawdzi uprawnienia użytkownika do ścieżki z zestawem ikon
  • sporządzi kopie poprzednich ikon wchodzących w skład zestawu
  • umieści nową ikonę w miejscu poprzednich
  • przywróci stare ikony (jeśli użytkownik wywoła go z parametrem resotore)

Skrypt akceptuje trzy parametry:

  1. local | global - wymagany do przeprowadzenia zmian w lokalnie lub globalnie zainstalowanym zestawie ikon
  2. theme_name - opcjonalny nazwa zestawu, powinna być nazwą głównego katalogu z zestawem ikon, jeśli żadna nazwa nie jest podana skrypt użyje domyślnej nazwy katalogu oxygen
  3. replace - opcjonalny wykorzystywany wraz z nazwą zestawu aby przywrócić uprzednio zapisane kopie starych ikon

Oczywiście musisz nadać atrybut wykonywalności dla skryptu zanim go użyjesz:

chmod +x kde-icon.sh

Przykłady użycia:

  • Aby zmienić ikonę w menu dla domyślnego zestawu (wymaga uprawnień super użytkownika)
    ./kde-icon.sh global
  • Aby zmienić ikonę w menu dla lokalnie zainstalowanego zestawu o nazwie OxygenRefit2-black-version
    ./kde-icon.sh local OxygenRefit2-black-version
  • Aby przywrócić poprzednio zachowane kopie ikon
    ./kde-icon.sh local OxygenRefit2-black-version restore

Skrypt zgłosi błędy jeśli, któraś z operacji nie zostanie zakończona sukcesem

Poz samym wykonaniem skryptu musisz także przeładować zestaw ikon wykorzystując Ustawienia systemowe KDE, bez tego nie zaobserwujesz żadnych zmian. Porównaj z poniższym zrzutem ekranu.

Przeładowanie zestawu ikon KDE

Aby dowieść, że to działa, tutaj jest moje menu przed:

Ikona Menu KDE Przed

A tu jest po:

Ikona Menu KDE Po

Skrypt jest także dostępny na moim serwerze svn, możesz do niego uzyskać dostęp podążając za tym linkiem.




Komentarze

Jeśli znalazłeś jakieś błędy w powyższej informacji lub po prostu chcesz wypowiedzieć swoje zdanie na jej temat, będę wdzięczny za pozostawienie komentarza.
Wszystkie komentarze będą pokazywać się na stronie po tym jak zostaną zatwierdzone. Przepraszam za to ale chcę mieć pewność, że moja strona będzie wolna od obraźliwych lub wulgarnych treści. Nie mam nic przeciwko krytyce ale zrób to właściwie dobierając słowa.

Pozostaw komentarz

  • Opublikowano:
  • Autor:
  •  
  • Komentarz:
  • 24.12.2012
  • Andrzej
  •  
  • "@Alex":
    @Alex To tell you the truth - I no longer use KDE on any actively used computers so currently I do not have any place to test the script. As you can see this is quite an old post. From what I recall any update to oxygen Icon theme would make the default icons back, but running the script again should fix it.
  • 23.12.2012
  • Alex
  •  
  • "Alex":
    Hi, I was using this script for a while and its work very well, but for some reason after some updates on Gentoo ~amd64 the KDE icon back to figure on menu. I believe if the icons are not .png it back to the original. I need to make some tests. Thank you!