O que acontece
Sua suposição de que os arquivos baixados "pousaram" na área "cega" está correta: Você pode obter a posição dos ícones com o comando:
gvfs-info <item>
Isso gera as coordenadas 64,1382
(x / y), o que deixa claro que o ícone está posicionado abaixo da tela à esquerda ( 1382
> 1080
).
Este é provavelmente o resultado de um bug.
O script abaixo pode ser usado para mover arquivos recém-criados na área de trabalho virtual (abrangendo) de uma área (por exemplo, a seção invisível) para outro local (neste caso: a seção visível).
Propriedades do script
Embora o script pareça estendido, ele é escrito de tal forma que ações e rotinas desnecessárias são evitadas. Se nenhum novo item aparecer na área de trabalho, ele apenas verificará novos arquivos, causando uma carga de praticamente nenhum processador.
O que faz
- Uma vez por segundo, o script verifica novos itens na pasta da área de trabalho
- Se novos itens forem encontrados, ele verificará o local e os moverá para a área visível, se necessário
Noentanto,,aáreadetrabalhoprecisaseratualizadadepoisqueositenssãomovidos,oquesópodeserfeitoseaáreadetrabalhofora"pasta" mais frontal. O script, portanto, define refresh
para True
. Na primeira vez que a área de trabalho está na frente, o script:
- atualiza a área de trabalho.
Como usar
O script precisa de ambos xdotool e wmctrl para serem instalados:
sudo apt-get install xdotool
sudo apt-get install wmctrl
xautomation
já deve estar no seu sistema, mas caso não esteja:
sudo apt-get install xautomation
Então:
- Copie o script abaixo em um arquivo vazio, salve-o como blind_area.py
-
Na seção principal do script, defina o tamanho da sua tela à esquerda:
left_scr = [1920, 1080]
-
Defina o nome localizado para a sua pasta da área de trabalho (provavelmente apenas "Desktop", mas em holandês seria "Bureaublad" por exemplo)
- Defina a resolução da tela da esquerda se for diferente do que defini
-
Teste o script com o comando:
python3 /path/to/blind_area.py
-
Testei-o ajustando o tamanho vertical da minha tela para metade do seu tamanho real, o que moveu todos os ícones novos (!) para os 50% da tela.
- Observe que as ações de movimentação ficarão visíveis quando você clicar na área de trabalho (ou tiver a área de trabalho na frente de qualquer forma).
-
Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicione o comando:
/bin/bash -c "sleep 15&&python3 /path/to/blind_area.py"
O script
#!/usr/bin/env python3
import subprocess
import os
import time
#--- set localized name of the Desktop folder below
desktop_name = "Desktop"
#--- set the resolution of the left screen below
left_scr = [1920, 1080]
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
home = os.environ["HOME"]
dr = home+"/"+desktop_name
# used strings
val = " 'metadata::nautilus-icon-position' "
search = "gvfs-info -a"+val
set_val = "gvfs-set-attribute -t string "
refresh_cmd = "xte 'key F5'"
# function to check if desktop is in front
def check_frontmost():
try:
frontmost = str(hex(int(get("xdotool getwindowfocus").strip())))
frontmost = frontmost[:2]+"0"+frontmost[2:]
w_list = [l.split() for l in get("wmctrl -lG").splitlines()]
except subprocess.CalledProcessError:
return False
else:
check = len([l for l in w_list if all([str(space[0]) in l, frontmost in l, str(space[1]) in l])]) > 0
return check
# function to get the resolution
def get_res():
xr = get("xrandr").split(); pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
dtfiles_1 = []
refresh = False
while True:
# check current files
time.sleep(1)
dtfiles_2 = os.listdir(dr)
# check for new files, move if necessary
newfiles = [f for f in dtfiles_2 if all([
not f in dtfiles_1,
not f.endswith("~"),
not f.startswith("."),
])]
if len(newfiles) != 0:
# check desktop size (only if new files appear)
space = get_res()
for f in newfiles:
fdir = os.path.join(dr, f); fdir = "'"+fdir+"'" if fdir.count(" ") != 0 else fdir
try:
loc = [int(n) for n in eval(get(search+fdir).split()[-1:][0])]
except:
pass
else:
if all([loc[0] < left_scr[0], loc[1] > left_scr[1]]):
command = set_val+fdir+" "+val+str(loc[0])+","+str(loc[1]-left_scr[1])
subprocess.Popen(["/bin/bash", "-c", command])
refresh = True
if all([refresh == True, check_frontmost() == True]):
subprocess.Popen(["/bin/bash", "-c", refresh_cmd])
refresh = False
dtfiles_1 = dtfiles_2
Notas
- Embora eu tenha testado por um longo tempo no meu sistema, o bug não aparece no meu sistema, então o teste "real" só pode ser feito por você:)
- Se a área de trabalho estiver realmente lotada com lotes de itens, a ação de atualização poderá organizar os ícones em uma área "proibida". Eu não pude testar, no entanto, se esse é o caso na sua situação, pela mesma razão acima.
- O script, como é, presume que as telas são top-alinhadas, então a área "cega" fica apenas no canto inferior esquerdo.