ชื่อเริ่มต้นมักจะถูกตั้งค่าโดย (รหัสภายใน) แอปพลิเคชันเอง อย่างไรก็ตามคุณสามารถเปลี่ยนได้เช่นโดยใช้xdotool
ซึ่งคุณจะต้องติดตั้งก่อน:
sudo apt-get install xdotool
จากนั้นเมื่อติดตั้งแล้วคุณสามารถตั้งชื่อหน้าต่างอื่นด้วย (เช่น) คำสั่ง:
xdotool search --name "Unity LauncherSwitcher" set_window --name "Monkey"
สิ่งนี้จะเปลี่ยน:
เป็น:
บันทึก
อย่างที่คุณเห็นคำสั่งนั้นมีอยู่ของ:
xdotool search --name "<current_name>" set_window --name "<new_name>"
<current_name>
มีตรงกับ
แก้ไขอีกทางหนึ่ง
จากความคิดเห็นของคุณฉันเข้าใจว่าคำสั่งด้านบนไม่ทำงาน ฉันทดสอบด้วยแอพพลิเคชั่นต่าง ๆ และใช้งานได้ ...
แต่ด้วยเหตุผลที่ฉันไม่เข้าใจไม่ใช่ด้วยRhytmbox
(!! อาจเป็นข้อผิดพลาด)
อีกทางเลือกหนึ่งคือการใช้wmctrl
ซึ่งคุณจะต้องติดตั้ง:
sudo apt-get install wmctrl
จากนั้นใช้คำสั่ง:
xprop -id "$(wmctrl -l | grep 'Rhythmbox' | awk '{ print $1 }')" -set WM_NAME "Music"
ฉันทดสอบมันสำเร็จแล้วRhythmbox
:
ทำการเปลี่ยนแปลงอย่างถาวรหรือไม่
ตามที่ระบุไว้ชื่อหน้าต่างเริ่มต้นจะถูกกำหนดไว้ในรหัสของแอปพลิเคชัน
การเปลี่ยนชื่อหน้าต่างเริ่มต้นจะต้องเปลี่ยนรหัส ที่สามารถทำได้หากรหัสมีอยู่จะต้องรวบรวมใหม่ในหลายกรณีและขึ้นอยู่กับภาษาที่ใช้เหนือสิ่งอื่นใด การเรียนการสอนทั่วไปจะเป็นไปไม่ได้และเกินขอบเขตของ AU ในความคิดของฉัน
แก้ไข 2
จัดการ / ตั้งชื่อหน้าต่างที่กำหนดเองได้อย่างยืดหยุ่นต่อแอพพลิเคชั่นจากไฟล์เดียว
ในคำถามเดิมของคุณคุณสงสัยว่ามีไฟล์บางประเภทที่จะตั้งชื่อหน้าต่างใหม่ของแอพพลิเคชั่นที่เฉพาะเจาะจงหรือไม่ ตามที่อธิบายไว้ไม่ได้เป็นอย่างนั้น แต่ก็สามารถสร้างได้
ในการตั้งค่าด้านล่างคุณสามารถกำหนดได้อย่างง่ายดายในแต่ละแอปพลิเคชันพื้นฐานว่ามีการตั้งชื่อหน้าต่างใหม่อย่างไร เพียงแค่สร้างไฟล์ใน~
(ไดเรกทอรีบ้านของคุณ) window_names.txt
ชื่อ สำหรับแต่ละแอปพลิเคชันที่คุณต้องการตั้งค่าชื่อเฉพาะให้เพิ่มบรรทัด, เรียงลำดับ, แอปพลิเคชันและชื่อหน้าต่างที่ต้องการ:
ไฟล์ข้อความซึ่งกำหนดชื่อหน้าต่างต่อแอปพลิเคชัน
gnome-terminal Monkey eats
gedit Banana
rhythmbox if he runs out of peanuts
คำอธิบาย
มีการตั้งค่าของสคริปต์พื้นหลังอย่างง่าย สคริปต์มีน้ำหนักเบามากดังนั้นจึงไม่มีผลกระทบใด ๆ ต่อประสิทธิภาพการทำงาน แต่อย่างใด
เมื่อสคริปต์เริ่มทำงานมันจะอ่านไฟล์~/window_names.txt
และโหลดการตั้งค่าต่อแอปพลิเคชัน จากนั้นจะจับตาดูหน้าต่างที่สร้างขึ้นใหม่ หากหน้าต่างปรากฏขึ้นซึ่งเป็นของหนึ่งในแอปพลิเคชันที่ระบุในไฟล์มันจะตั้งชื่อหน้าต่างตามลำดับ
วิธีการตั้งค่า
สคริปต์ใช้ทั้งwmctrl
และxdotool
:
sudo apt-get install wmctrl
sudo apt-get install xdotool
คัดลอกสคริปต์ลงในไฟล์เปล่าบันทึกเป็น setwindowname.py
สร้างไฟล์~/window_names.txt
(ชื่อตรงwindow_names.txt
) เพิ่มแอปพลิเคชันของคุณในรูปแบบ:
<application> <window_name>
เช่น
gedit Text editor
ชื่อหน้าต่างอาจมีช่องว่าง
ทดสอบสคริปต์จากเทอร์มินัลด้วยคำสั่ง:
python3 /path/to/setwindowname.py
หากทำงานได้ตามที่คาดไว้ให้เพิ่มลงในแอปพลิเคชันเริ่มต้น: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม
โปรดทราบว่าในบางกรณีสคริปต์อาจหยุดทำงานหากสคริปต์เริ่มทำงานเมื่อเดสก์ท็อปยังไม่โหลดเต็มที่ หากไม่เป็นเช่นนั้นคำสั่งเพื่อเพิ่มไปยังแอปพลิเคชันเริ่มต้นจะเป็น:
/bin/bash -c "sleep 15&&python3 /path/to/setwindowname.py"
บท
#!/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
หมายเหตุ
- หากไฟล์
~/window_names.txt
ถูกแก้ไขสคริปต์จะต้องเริ่มต้นใหม่
- มันทำงานได้ไม่ว่าจะเริ่มแอปพลิเคชั่นอย่างไร ก็ยังทำงานเมื่อโปรแกรมจะวิ่งออกจากสถานีและ /
sudo
หรือ
- มันไม่รบกวนกับตัวเลือกคลิกขวาของแอปพลิเคชันใด ๆ
- สคริปต์ยัง "รักษา" ชื่อหน้าต่าง; หากกระบวนการอื่นเปลี่ยนชื่อหน้าต่างหลังจากนั้น (การเปิดแท็บเปลี่ยนไดเรกทอรีเช่น) สคริปต์จะเห็นหน้าต่างเป็น "หน้าต่างใหม่" และรักษาชื่อหน้าต่างที่คุณเลือก