
lirc
리모컨으로 PC를 제어할 수 있도록 설정했습니다 . 내가 편집한 다른 모드 사이를 전환하려면.lircrc다음과 같이:
begin vlc
include ~/.lirc/vlc
end vlc
begin gnome
include ~/.lirc/gnome
end gnome
begin firefox
include ~/.lirc/firefox
end firefox
begin me-tv
include ~/.lirc/me-tv
end me-tv
begin
prog = irexec
button = KEY_YELLOW
config = if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
mode = vlc
end
begin
prog = irexec
button = KEY_GREEN
mode = gnome
end
begin
prog = irexec
button = KEY_RED
config = if [ -n $(pgrep -x firefox) ]; then (firefox &); fi
mode = firefox
end
begin
prog = irexec
button = KEY_BLUE
config = if [ -n $(pgrep -x me-tv) ]; then (me-tv &); fi
mode = me-tv
end
Firefox로 전환하는 것을 제외하면 모든 것이 잘 작동합니다. Firefox가 실행 중일 때 빨간색 버튼을 누르면 모드가 전환됩니다(원하는 대로).그리고 Firefox의 두 번째 창/인스턴스를 엽니다(그렇지 않아야 함)..
문제는 Firefox에서만 나타납니다.
Edit
→ Preferences
→ Tabs
→가 Open new windows in a new tab instead
이미 활성화되어 있습니다:
무슨 일이야Firefox가 실행 중일 때firefox
터미널에서 시작하나요 ?
firefox
- 두 번째 창이 열립니다firefox about:startpage
- 사전 구성된 시작 페이지와 함께 Firefox의 새 탭이 열립니다.- (!)
firefox about:blank
- Firefox의 새 탭이 개인 시작 페이지와 함께 열립니다(단축 다이얼) firefox chrome://speeddial/content/speeddial.xul
(단축다이얼 시작페이지 주소)- 아무 반응이 없습니다
무슨 일이야Firefox가 실행되지 않을 때firefox
터미널에서 시작하나요 ?
firefox
Preferences
- Firefox는 (Show my windows and tabs from last time
) 에 구성된 대로 열립니다 .firefox about:startpage
- Firefox는 사전 구성된 시작 페이지가 있는 추가 새 탭으로 열립니다.- (!)
firefox about:blank
- Firefox는 새로운 빈 탭이 추가로 열립니다. firefox chrome://speeddial/content/speeddial.xul
- Firefox가 열리지 않습니다:*** Preventing external load of chrome: URI into browser window.
Use -chrome <uri> instead
그래서 스크립트( config = ...
)의 명령어를 수정하고 주소를 추가 하면 about:blank
부분적으로 문제가 해결되는 것 같습니다. 문제가 남아 있기 때문에Firefox를 포그라운드에 두지 않습니다이미 실행 중일 때. 이런 일만 일어납니다때때로.
이 잘못된 동작을 수정하기 위해 이 스크립트를 편집하는 데 도움을 줄 수 있는 사람이 있습니까?(원천내가 수정한 스크립트의 내용입니다.)
답변1
그 중 일부 쉘 코드원천주장하는 대로 수행하지 않습니다. 주로 다음과 같은 유형이 사용됩니다.
if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
이는 vlc &
두 가지 경우에 실행됩니다. "vlc"와 일치하는 프로세스가 없고 "vlc"와 일치하는 프로세스가 정확히 하나인 경우. "vlc"와 일치하는 프로세스가 두 개 이상 있으면 vlc &
실행되지 않습니다. 따라서 이러한 if 블록은 다소 쓸모가 없습니다. 그냥 달리는 것이 vlc &
더 정확할 것입니다.
불행하게도 잘못된 쉘 조언은 인터넷에서 흔한 일입니다.
문제 설명에서 원하는 결과는 프로그램이 아직 실행 중이 아닌 경우 실행되고, 실행 중인 경우 해당 창을 앞으로 가져오고 초점을 맞추는 것입니다. 이를 위해 wmctrl
사용될 수 있습니다.
wmctrl -a 'Mozilla Firefox'
제목에 "Mozilla Firefox"가 포함된 창을 찾아 "활성화"합니다. 즉, 그것이 있는 작업 공간으로 이동하여 앞으로 가져오고 집중하십시오. 둘째, 일치하는 창이 없으면 wmctrl은 아무것도 하지 않고 0이 아닌(false) 종료 상태로 종료합니다. 이 경우 프로그램이 실행 중이 아니라고 가정하고 대신 시작할 수 있습니다.
wmctrl -a 'Mozilla Firefox' || firefox &
그래도 아직 완벽하지는 않습니다. Firefox 창 이외의 다른 창에는 잠재적으로 제목에 해당 문자열이 포함될 수 있으므로 이 경우 올바른 창을 식별하는 보다 안정적인 방법을 찾아야 합니다.
-x를 사용하면 wmctrl은 일반적으로 프로그램별로 고유한 값을 갖는 창의 VM_CLASS에서 작동합니다. wmctrl -lx
Firefox가 실행되는 동안 실행하면 볼 수 있듯이 모든 Firefox 창에는 VM_CLASS "Navigator.Firefox"가 있습니다.
$ wmctrl -lx
...
0x03ba3d43 3 gnome-terminal.Gnome-terminal pilot Terminal
0x04c000bc 0 Navigator.Firefox pilot Group #1 - Speed Dial - Mozilla Firefox
이를 통해 VM_CLASS로 정확히 "Navigator.Firefox"가 있는 창을 선택할 수 있습니다.
wmctrl -Fxa Navigator.Firefox || firefox &
다른 프로그램에도 동일하게 적용될 수 있기를 바랍니다.