Onde o ícone é definido
A representação de uma aplicação no Dash e no iniciador Unity é definida em um arquivo .desktop. Esses arquivos .desktop incluem uma linha para definir o comando para executar o aplicativo, uma linha para definir o ícone do aplicativo e um número variável de linhas possíveis para definir propriedades adicionais.
Para ver o conteúdo atual do iniciador do Unity por comando:
gsettings get com.canonical.Unity.Launcher favorites
Se você executar este comando, irá (a.o.) obter uma lista de referências aos arquivos .desktop, na ordem em que aparecem no iniciador. A menção de um aplicativo na lista é semelhante a: application://thunderbird.desktop
. Refere-se (neste exemplo) ao arquivo thunderbird.desktop
.
Quando o Unity reúne suas informações no login, ele primeiro procura no diretório local arquivos .desktop, ( ~/.local/share/applications
) e, em segundo lugar, em /usr/share/applications
. Se um arquivo .desktop existir no diretório, o local terá preferência. Normalmente, durante a sua sessão, o ícone do lançador fica vinculado ao arquivo .desktop em qualquer um desses diretórios.
Quando o conteúdo do arquivo da área de trabalho vinculado é editado durante a sessão, o resultado é aplicado imediatamente. No entanto, o ícone como aparece no iniciador do Unity não muda até você:
- logout / login
- remova o ícone do iniciador e bloqueie-o novamente
Como você não pode remover o ícone de um aplicativo em execução do ativador, alterando o ícone de um aplicativo em execução não é possível.
Para alterar o ícone de um aplicativo no launcher que não está , você pode usar os dois scripts abaixo.
O primeiro copia o arquivo .desktop para o diretório local e edita a linha Icon=
na cópia local. O segundo atualiza o ícone no lançador (e o liga novamente, se necessário).
Script 1; mudar o ícone
como usar
Copie o script abaixo em um arquivo vazio, salve-o como change_icon.py
, execute-o pelo comando:
python3 change_icon.py <applicationnamme.desktop> </path/to/new/icon>
por exemplo:
python3 change_icon.py thunderbird.desktop </path/to/new/icon>
para uso mais suave:
crie um diretório ~/bin
, copie o script para o diretório, remova a extensão de idioma do script, torne-a executável e (após o logout / login), você pode usar o script usando o comando:
change_icon <applicationnamme.desktop> </path/to/new/icon>
Mais informações sobre onde armazenar e como definir ícones, você pode encontrar aqui
O script
#!/usr/bin/env python3
import os
import shutil
import sys
file = sys.argv[1]
new_icon = sys.argv[2]
user_home = os.environ["HOME"]
dir_1 = user_home+"/.local/share/applications/"
dir_2 = "/usr/share/applications/"
dtfile_list1 = os.listdir(dir_1)
dtfile_list2 = os.listdir(dir_2)
subject = dir_1+file
if not os.path.exists(subject):
try:
shutil.copyfile(dir_2+file, dir_1+file)
except FileNotFoundError:
print("the file "+file+" does not exist")
def read_file(file):
with open(file) as edit:
return edit.readlines()
def write_file(file, linelist):
with open(file, "wt") as edit:
for line in linelist:
edit.write(line)
subject_lines = read_file(subject)
index = [i for i in range(len(subject_lines)) \
if subject_lines[i].startswith("Icon=")][0]
subject_lines[index] = "Icon="+new_icon+"\n"
write_file(subject, subject_lines)
Script 2; atualize o ícone no lançador
como usar
Copie o script abaixo em um arquivo vazio, salve-o como refresh.py
, execute-o pelo comando:
python3 refresh.py <applicationnamme.desktop>
para uso mais suave:
Como no script acima, copie o script em ~/bin
, remova a extensão de idioma, torne-a executável e (após o logout / login), você pode simly usar o script pelo comando:
refresh <applicationnamme.desktop>
por exemplo:
refresh thunderbird.desktop
O script
#!/usr/bin/env python3
import subprocess
import time
import sys
desktopfile = sys.argv[-1]
def read_currentlauncher():
# reads the current launcher contents
return subprocess.check_output([
"gsettings", "get", "com.canonical.Unity.Launcher", "favorites"
]).decode("utf-8")
def set_launcher(llist):
# sets a defined unity launcher list
current_launcher = str(llist).replace(", ", ",")
subprocess.Popen([
"gsettings", "set", "com.canonical.Unity.Launcher", "favorites",
current_launcher,
])
def refresh_icon(desktopfile):
current_launcher = read_currentlauncher()
current_launcher_temp = eval(current_launcher)
item = [item for item in current_launcher_temp if desktopfile in item][0]
index = current_launcher_temp.index(item)
current_launcher_temp.pop(index)
set_launcher(current_launcher_temp)
time.sleep(2)
set_launcher(current_launcher)
refresh_icon(desktopfile)