창 제목을 생성하는 데 어떤 파일이 관련됩니까? 예를 들어 리듬 박스를 열면 프로그램 이름이 창 제목으로 표시됩니다. 그러나 .desktop
파일에 의해 생성되지는 않습니다 . 응용 프로그램 제목에 텍스트를 추가하려면 어떤 파일을 편집해야합니까? 변경 사항을 영구적으로 유지하고 싶습니다.
나는 그놈 3.16과 함께 우분투 그놈 15.04를 사용합니다.
창 제목을 생성하는 데 어떤 파일이 관련됩니까? 예를 들어 리듬 박스를 열면 프로그램 이름이 창 제목으로 표시됩니다. 그러나 .desktop
파일에 의해 생성되지는 않습니다 . 응용 프로그램 제목에 텍스트를 추가하려면 어떤 파일을 편집해야합니까? 변경 사항을 영구적으로 유지하고 싶습니다.
나는 그놈 3.16과 함께 우분투 그놈 15.04를 사용합니다.
답변:
초기 이름은 일반적으로 응용 프로그램 자체의 코드 내에서 설정됩니다. 그러나 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의 범위를 넘어서는 불가능하고 불가능합니다.
원래 질문에서 특정 응용 프로그램의 새 창 제목을 설정하는 파일이 있는지 궁금합니다. 설명했듯이, 그렇지는 않지만 만들 수 있습니다.
아래 설정에서 응용 프로그램 기반으로 새 창의 이름을 지정하는 방법을 매우 쉽게 정의 할 수 있습니다 . 간단히 ~
(홈 디렉토리)에 파일을 만드 십시오 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
모든 것이 예상대로 작동하면 시작 응용 프로그램에 추가하십시오 : 대시> 시작 응용 프로그램> 추가
데스크탑이 아직 완전히로드되지 않은 경우 스크립트가 시작되면 스크립트가 중단 될 수 있습니다. 그 경우라면 시작 응용 프로그램에 추가하는 명령은 다음과 같습니다.
/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
.xdotool search --name "Rhythmbox" set_window --name "Music"
응용 프로그램을 열고 닫은 상태에서 명령을 수행하고 다시 시작 (alt + f2 + r)하여 작동하는지 확인했지만 여전히 동일한 창 제목을 표시합니다.
제목은 응용 프로그램 실행 파일에 의해 생성되며 쉽게 편집 할 수있는 방법이 없습니다.
응용 프로그램이 열린 후 제목 변경 :
xdotool
함께 설치sudo apt-get install xdotool
pgrep myapp
(예 pgrep rythmbox
)창 제목을 변경하십시오 ( HERE_THE_PID
응용 프로그램의 프로세스 ID로 대체 ).
xdotool search --onlyvisible --pid HERE_THE_PID --name "\a\b\c" set_window --name "$new_name"
사용자 정의 제목으로 모든 응용 프로그램을 시작하기위한 스크립트 만들기 :
change-title
다음 내용으로 불리는 bash 스크립트를 작성하십시오 .
#!/bin/bash
## The new name of the window is the first argument passed to the script:
new_name="${1}"
## application is all arguments but the first (the title)
application=${@:2}
## Run the app in background and in quiet mode:
$application &> /dev/null &
## Get the pid of the app:
app_pid=$!
## Wait until the window appears:
until xdotool search --onlyvisible --pid $app_pid &> /dev/null; do sleep 0.01; done
## Change the window name:
xdotool \
search \
--onlyvisible \
--pid $app_pid \
--name "\a\b\c" \
set_window \
--name "$new_name"
## Comment this line to run the app in background:
wait $app_pid
로 실행 가능하게 만드십시오 chmod a+x change-title
./change-title "NewTitle" theapp --its-arguments
변경 사항을 영구적으로 작성하려면 다음을 수행하십시오.
gksudo gedit /usr/local/bin/custom-title
(fx. user / local / bin / music)sudo chmod a+x /usr/local/bin/custom-title
gksudo gedit /usr/share/applications/rhythmbox.desktop
이 파일에는 다음과 같은 줄이 있습니다 (줄 번호는 35입니다).
Exec=rhythmbox %U
작성된 파일 이름으로이를 대체하십시오.
Exec=custom title (fx. Exec=music)
"열기"기능에 대한 변경을 적용하려면
gksudo gedit /usr/share/applications/rhythmbox-device.desktop
rhythmbox
이전 .desktop 파일에서 사용 된 이름으로 변경 하십시오.sudo kill rhythmbox
(요약) 필요한 파일 개요
응용 프로그램을 완전히 작동 시키려면 /usr/share/applications
완료되면 3 개의 .desktop 파일이 있어야합니다 .
music.desktop
또는 신청 한 이름
로 Exec=music
와 Hidden=true
(마지막 하나를 추가하지 않을 경우 현재)
rhythmbox.desktop
로 Exec=rhythmbox %U
와Hidden=true
rhythmbox-device.desktop
과 Exec=music --select-source %U
및 없이 숨겨진 항목
즉, 항상 마지막 파일을 열고 제목은 항상 그대로 있어야합니다. ALT + F2 + R을 사용하여 세션을 새로 고치는 경우 유일한 방법은 재설정입니다.
/usr/local/bin
물론 bash 스크립트가 있어야합니다 .최종 메모 :
--name "\a\b\c"
를 수정 하는 것이므로 응용 프로그램 이름으로 바꾸지 마십시오!@Maud Kon이${@:2}
요청한 코드에 대한 설명 :
$@
모든 위치 매개 변수를 저장하는 배열입니다.${@:2}
의미 : 모든 위치 매개 변수이지만 첫 번째 위치 매개 변수이 방법으로 프로그램을 호출한다고 가정 해 봅시다.
awesome-program foo bar baz fooz
${@:1}
될 것이다 foo bar baz fooz
${@:2}
될 것이다 bar baz fooz
${@:3}
될 것이다 baz fooz
${@:4}
될 것이다 fooz
${@:5}
더 많은 위치 매개 변수가 없기 때문에 비어 있습니다.$@
, ${@}
그리고 ${@:1}
같은 일이다 : 모든 위치 매개 변수.
나는 Thunar와 함께이 문제에 직면했습니다. Compiz Scale이 Thunar 창 제목을 "AnyFolder-파일 관리자"로 표시하고 불필요한 정보가있는 공간을 차지했을 때 성가 시게되었습니다.
내가 가진 위에서 언급 한 방법을 시도 xdotool
하고 wmctrl
있지만,하는 Thunar는 창 제목 내가 다른 폴더로 이동 때마다 변경 이후 그들은 영구적하지 않았다. 그리고 Thunar가 변경할 때마다 제목을 다시 바꾸기 위해 스크립트를 배경에 두는 것이 과장된 느낌이 들었습니다.
더 쉬운 해결책은 모든 응용 프로그램과 함께 제공 되는 변환 파일 을 사용하는 것이 었습니다 . 패키지에 msgfmt
포함 된 도구를 사용하여 번역 소스 파일을 다시 컴파일 하면 gettext
됩니다. 나는 단지 gThumb을 위해 이것을했다-단지 재미를 위해-거기에서도 효과가있다.
1. 관련 응용 프로그램의 소스 코드를 얻습니다. http://packages.ubuntu.com을
입력
하거나 소스를 가져 와서 소스 폴더를 찾으 십시오. 일반 텍스트 언어 파일이 들어 있습니다. 당신의 언어를 찾으십시오. 브라질 출신이라고 가정 해 봅시다.$ sudo apt-get source APPLICATION
po
pt_BR.po
2. 필요에 따라 파일을 변경하십시오
. 정확한 것을 찾으십시오! 제거하거나 변경하려는 창 제목. Thunar의 경우 "파일 관리자" 였고 pt_BR.po
발견했습니다.
:. set window title
: ../thunar/thunar-window.c:3154 ../Thunar.desktop.in.in.h:3
: ../thunar/thunar-settings.desktop.in.h:1
msgid "File Manager"
msgstr "Gerenciador de arquivos"
msgid
응용 프로그램이 보내는 신호와 msgstr
langpack이 변환 하는 신호는
어디에 있습니까 ? 원하는대로 msgstr
예 :) msgstr "o_-"
. msgstr ""
응용 프로그램이로 돌아갑니다 msgid
. "빈"상태로하려면 공백을 사용하십시오. 또는 점. 또는 펑키 ASCII 기호.
3. 컴파일러 가져 오기
언급 한 것처럼 패키지에서 필요하므로 다음을 입력해야합니다.msgfmt
gettext
$ sudo apt-get install gettext
4.
터미널을 열고, 변경 한 폴더로 가서 pt_BR.po
msgfmt가 파일에 오류가 있는지 확인하도록하십시오
$ msgfmt --check --check-accelerators=_ -o /dev/null pt_BR.po
.
$ msgfmt -c -o pt_BR.mo pt_BR.po
5. 파일 배치 / usr / share / locale / YOUR_LANGUAGE / LC_MESSAGES / 또는 / usr / share / locale-langpack / YOUR_LANGUAGE / LC_MESSAGES /
의 원래 번역 이름을보고 파일을 배치하십시오. 이 두 곳 모두에 존재하지 않는 경우, 그 중 하나에 넣어와 파일 이름을 가진 작은 실험 : 소, 낙타 표기법 또는 같은, 즉 또는 .
원본을 먼저 백업
한 다음 새 번역을 복사하십시오.gthumb.mo
YOUR-APP.mo
$ sudo cp /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo.BAK
$ sudo cp pt_BR.mo /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo
YOUR_APP가 실행 중이면 모든 인스턴스를 닫으십시오.
그것을 테스트하십시오!
힌트 만약 내가있는 것처럼 EN 현지화로 우분투를 실행하고 있다면, * .po를 사용하고, 변경되지 않은 모든 msgid / msgstr 커플을 삭제하거나 주석을 달고 / usr / share / locale / en / LC_MESSAGES /에 넣으십시오 .
출처 :
http://wiki.xfce.org/translations/translation_guidance_in_xfce
.desktop
파일에 관하여 : 다시, 당신은 내가 읽은 다른 답변과 내 대답을 혼동해야합니다. 대답은 .desktop
파일을 편집하지 않으며 응용 프로그램을 다시 설치할 때 필요한 작업이 없습니다.
.desktop
파일을 수정 하고 번역 파일을 그렇게 할 때 일반적인 질문이었습니다 . 당신은 그것을 알고 있습니까? 그리고 지금 "mu__Incoming-File Manager" 가있는 "mu__Incoming- "을 읽은 이후로 모든 스크립트 솔루션에 두 번째 기회를 줄 수 있습니다 . "경로 / 폴더 / 폴더"가없는 정적 창 제목을 가진 응용 프로그램의 경우 내 솔루션이 제대로 작동합니다.
때문에 내 자신의 대답은 응용 프로그램의 번역 파일을 사용하여 나에게 몇 가지 경우에 충분하지, 난 기반으로 구축 야곱 Vlijm의 솔루션 및 창 제목에 특정 문자열을 대체하는 자신의 스크립트를 수정했습니다. 이 답변을 별도로 게시해도 괜찮습니다. 아이디어를 얻고 스크립트를 설정하는 것에 대한 크레딧은 Jacob Vlijm 에게 갑니다 !
예를 들어, Some fancy website
대신에 읽고 싶습니다 Some fancy website - Mozilla Firefox
. Compiz scale plugin은 이제 - File manager
다른 문자열과 다른 문자열 도 제거 하여 훨씬 명확 해졌습니다 .
내가 변경 한 사항 :
//
구분 기호로 사용window_names.txt
wmctrl
대신 사용하십시오 xdotool
.wmctrl -i -r [WindowIdentifier] -N 'new Title'
수정 된 내용 window_names.txt
은 다음과 같습니다 :
[process name]//[exact text to replace]//[replacement text]
firefox// - Mozilla Firefox// (whitespace!)
thunar// - File Manager// ° xyz
gedit// - gedit// - 123
포주 스크립트 :
#!/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("//"))
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(None, 4)
winID = line[0] ; pid = line[2] ; currentTitle = line[4]
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]:
newTitle = str.replace(currentTitle, app[1], app[2])
subprocess.Popen(["wmctrl", "-i", "-r", winID, "-N", newTitle])
curr_1 = curr_2
time.sleep(0.3)
except:
pass
다시 한 번, 아이디어를 얻고 스크립트를 설정 한 것에 대한 크레딧은 Jacob Vlijm에게갑니다!