Tên ban đầu thường được đặt bởi (mã bên trong) chính ứng dụng. Tuy nhiên, bạn có thể thay đổi nó, ví dụ bằng cách sử dụng xdotool
, mà bạn sẽ phải cài đặt trước:
sudo apt-get install xdotool
Sau đó, khi được cài đặt, bạn có thể đặt tên cửa sổ khác bằng (ví dụ) lệnh:
xdotool search --name "Unity LauncherSwitcher" set_window --name "Monkey"
Điều này sẽ thay đổi:
vào:
Ghi chú
Như bạn có thể thấy, lệnh tồn tại của:
xdotool search --name "<current_name>" set_window --name "<new_name>"
Các <current_name>
có khớp chính xác.
Chỉnh sửa thay thế
Từ nhận xét của bạn, tôi hiểu lệnh trên không hoạt động. Tôi đã thử nghiệm nó với các ứng dụng khác nhau và nó đã hoạt động ...
Nhưng vì một lý do tôi không hiểu, KHÔNG với Rhytmbox
(!! có thể là một lỗi)
Một cách khác là sử dụng wmctrl
, mà bạn cũng sẽ phải cài đặt:
sudo apt-get install wmctrl
Sau đó sử dụng lệnh:
xprop -id "$(wmctrl -l | grep 'Rhythmbox' | awk '{ print $1 }')" -set WM_NAME "Music"
Tôi đã thử nó trên Rhythmbox
:
Làm cho những thay đổi vĩnh viễn?
Như đã đề cập, tên cửa sổ mặc định được xác định trong mã của ứng dụng.
Thay đổi tiêu đề cửa sổ mặc định sẽ cần phải thay đổi mã. Điều đó có thể được thực hiện nếu mã có sẵn, sẽ cần biên dịch lại trong nhiều trường hợp và phụ thuộc vào ngôn ngữ được sử dụng, trong số những thứ khác. Theo tôi, một hướng dẫn chung sẽ khá bất khả thi và vượt ra ngoài phạm vi của AU.
CHỈNH SỬA 2
Quản lý linh hoạt / đặt tên cửa sổ tùy chỉnh cho mỗi ứng dụng từ một tệp duy nhất
Trong câu hỏi ban đầu của bạn, bạn đã tự hỏi nếu có một loại tệp nào đó để đặt tiêu đề của các cửa sổ mới của một ứng dụng cụ thể. Như đã giải thích, đó không phải là trường hợp, tuy nhiên, nó có thể được tạo ra.
Trong thiết lập bên dưới, bạn có thể dễ dàng xác định trên cơ sở cho mỗi ứng dụng về cách các cửa sổ mới được đặt tên. Đơn giản chỉ cần tạo một tập tin trong ~
(thư mục nhà của bạn), được đặt tên window_names.txt
. Đối với mỗi ứng dụng bạn muốn đặt một Windowname cụ thể, hãy thêm một dòng, sau đó, ứng dụng và tên cửa sổ mong muốn:
Một tệp văn bản, xác định tên cửa sổ cho mỗi ứng dụng
gnome-terminal Monkey eats
gedit Banana
rhythmbox if he runs out of peanuts
Giải trình
Các thiết lập tồn tại của một kịch bản nền đơn giản. Kịch bản rất nhẹ, vì vậy nó sẽ không có bất kỳ ảnh hưởng đáng chú ý nào đến hiệu suất.
Khi tập lệnh bắt đầu, nó sẽ đọc tệp ~/window_names.txt
và tải các cài đặt cho mỗi ứng dụng. Sau đó, nó để mắt đến các cửa sổ mới được tạo ra. Nếu một cửa sổ xuất hiện thuộc về một trong các ứng dụng, được xác định trong tệp, nó sẽ đặt tên cửa sổ tương ứng.
Làm thế nào để thiết lập
Kịch bản sử dụng cả hai wmctrl
và xdotool
:
sudo apt-get install wmctrl
sudo apt-get install xdotool
Sao chép tập lệnh vào một tập tin trống lưu nó dưới dạng setwindowname.py
Tạo tệp ~/window_names.txt
(được đặt tên chính xác window_names.txt
), thêm ứng dụng của bạn ở định dạng:
<application> <window_name>
ví dụ
gedit Text editor
Tên cửa sổ có thể bao gồm khoảng trắng.
Chạy thử tập lệnh từ thiết bị đầu cuối bằng lệnh:
python3 /path/to/setwindowname.py
Nếu tất cả đều hoạt động như mong đợi, hãy thêm nó vào các ứng dụng khởi động: Dash> Ứng dụng khởi động> Thêm
Lưu ý rằng trong một số trường hợp, tập lệnh có thể bị hỏng nếu nó khởi động khi máy tính để bàn chưa được tải đầy đủ. Nếu đó là trường hợp, lệnh để thêm vào các ứng dụng khởi động sẽ là:
/bin/bash -c "sleep 15&&python3 /path/to/setwindowname.py"
Kịch bản
#!/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
Ghi chú
- Nếu tập tin
~/window_names.txt
được chỉnh sửa, tập lệnh cần phải được khởi động lại.
- Nó hoạt động cho dù ứng dụng được khởi động như thế nào; nó cũng hoạt động khi các ứng dụng được chạy từ thiết bị đầu cuối / và hoặc với
sudo
.
- Nó không can thiệp vào tùy chọn nhấp chuột phải của bất kỳ ứng dụng nào .
- Kịch bản cũng "duy trì" tên cửa sổ; nếu một quá trình khác thay đổi tên cửa sổ sau đó (mở các tab, thay đổi thư mục, ví dụ) tập lệnh sẽ xem cửa sổ là "cửa sổ mới" và duy trì tên cửa sổ bạn chọn.