Il nome iniziale viene generalmente impostato dal (codice all'interno) dell'applicazione stessa. Puoi comunque modificarlo, ad esempio utilizzando xdotool
, che dovresti prima installare:
sudo apt-get install xdotool
Quindi, una volta installato, è possibile impostare un altro nome di finestra tramite (ad esempio) il comando:
xdotool search --name "Unity LauncherSwitcher" set_window --name "Monkey"
Questo cambierà:
in:
Nota
Come puoi vedere, esiste il comando di:
xdotool search --name "<current_name>" set_window --name "<new_name>"
La <current_name>
deve corrispondere esattamente.
Modifica in alternativa
Dal tuo commento, capisco che il comando sopra non ha funzionato. L'ho testato con diverse applicazioni e ha funzionato ...
Ma per un motivo che non capisco, NON con Rhytmbox
(!! potrebbe essere un bug)
Un'alternativa è usare wmctrl
, che dovresti anche installare:
sudo apt-get install wmctrl
Quindi utilizzare il comando:
xprop -id "$(wmctrl -l | grep 'Rhythmbox' | awk '{ print $1 }')" -set WM_NAME "Music"
L'ho testato con successo su Rhythmbox
:
Rendere permanenti le modifiche?
Come accennato, il nome della finestra predefinito è definito nel codice dell'applicazione.
La modifica del titolo della finestra predefinita dovrebbe modificare il codice. Ciò può essere fatto se il codice è disponibile, dovrebbe essere ricompilato in molti casi e dipende, tra le altre cose, dalla lingua utilizzata. A mio avviso, un'istruzione generale sarebbe del tutto impossibile e al di là (al di fuori) dell'ambito di UA.
MODIFICA 2
Gestisci / imposta in modo flessibile nomi di finestre personalizzati per applicazione da un singolo file
Nella tua domanda originale, ti stavi chiedendo se esistesse una sorta di file per impostare il titolo di nuove finestre di un'applicazione specifica. Come spiegato, non è così, tuttavia, può essere creato.
Nell'impostazione di seguito, è possibile definire molto facilmente in base all'applicazione il nome di nuove finestre. Basta creare un file nella ~
(directory home), denominato window_names.txt
. Per ciascuna delle applicazioni per cui si desidera impostare un nome specifico del vento, aggiungere una riga, in seguito, l'applicazione e il nome della finestra desiderata:
Un file di testo che definisce i nomi delle finestre per applicazione
gnome-terminal Monkey eats
gedit Banana
rhythmbox if he runs out of peanuts
Spiegazione
L'installazione esiste di un semplice script in background. La sceneggiatura è molto leggera, quindi non avrà alcun effetto evidente sulla performance.
Una volta avviato, lo script legge il file ~/window_names.txt
e carica le impostazioni per applicazione. Quindi tiene d'occhio le finestre appena create. Se viene visualizzata una finestra che appartiene a una delle applicazioni, definita nel file, imposta di conseguenza il nome della finestra.
Come impostare
Lo script utilizza sia wmctrl
e xdotool
:
sudo apt-get install wmctrl
sudo apt-get install xdotool
Copia lo script in un file vuoto salvalo come setwindowname.py
Crea il file ~/window_names.txt
(con il nome esatto window_names.txt
), aggiungi le tue applicazioni nel formato:
<application> <window_name>
per esempio
gedit Text editor
Il nome della finestra può includere spazi.
Esegui il test dello script dal terminale con il comando:
python3 /path/to/setwindowname.py
Se tutto funziona come previsto, aggiungilo alle applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi
Si noti che in alcuni casi, uno script potrebbe interrompersi se si avvia quando il desktop non è ancora completamente caricato. In tal caso, il comando da aggiungere alle applicazioni di avvio sarebbe:
/bin/bash -c "sleep 15&&python3 /path/to/setwindowname.py"
Il copione
#!/usr/bin/env python3
import subprocess
import time
import os
f = os.environ["HOME"]+"/"+"window_names.txt"
change = []
lines = open(f).read().splitlines()
for l in lines:
try:
change.append([l.split()[0], (" ").join(l.split()[1:])])
except IndexError:
pass
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = []
while True:
try:
curr_2 = get(["wmctrl", "-lp"]).splitlines()
new = [w for w in curr_2 if not w in curr_1]
for item in new:
line = item.split(); pid = line[2]
procs = get(["ps", "-e"]).splitlines()
match = [l for l in procs if pid in l][0]
for app in [app for app in change if app[0] in match]:
subprocess.Popen(["xdotool", "set_window", "--name", app[1], line[0]])
curr_1 = curr_2
time.sleep(0.3)
except:
pass
Appunti
- Se il file
~/window_names.txt
viene modificato, è necessario riavviare lo script.
- Funziona indipendentemente da come viene avviata un'applicazione; funziona anche quando le applicazioni vengono eseguite dal terminale / e o con
sudo
.
- Non interferisce con l'opzione di scelta rapida di qualsiasi applicazione.
- Lo script "mantiene" anche il nome della finestra; se in seguito un altro processo modifica il nome della finestra (apertura delle schede, modifica delle directory, ad esempio) lo script vede la finestra come una "nuova finestra" e mantiene il nome della finestra desiderato.