특정 프로필에서 Firefox의 URL을 원격으로 여는 방법은 무엇입니까?


9

여러 개의 다른 프로파일이 실행되는 Firefox 인스턴스가 여러 개 있습니다. 그중에는 "software"및 "test"라는 이름의 프로파일이 있습니다.

bash 스크립트에서 URL을 열어서 다음과 같이 "test"프로파일에서 열려고합니다.

firefox -P "test" http://www.example.org/

그러나 그것은 어쨌든 "소프트웨어"프로필로 엽니 다. 어떤 아이디어?

Mozilla / 5.0 (X11; U; Linux x86_64; en-US; rv : 1.9.1.8) Gecko / 20100308 Iceweasel / 3.5.8 (Firefox / 3.5.8과 같은)

아니요, 권한 문제가 아닙니다. 모든 프로필 디렉토리가 완벽하게 권한 아래 있습니다.

root@przehyba:~/.mozilla# ls -ld firefox/
drwx------ 13 miernik miernik 4096 Mar 11 09:15 firefox/
root@przehyba:~/.mozilla# ls -ld firefox/*
drwxr-xr-x  9 miernik miernik 4096 Mar 12 11:29 firefox/info
-rw-r--r--  1 miernik miernik  560 Mar 11 09:15 firefox/profiles.ini
drwxr-xr-x 10 miernik miernik 4096 Mar 16 11:51 firefox/software
drwxr-xr-x  9 miernik miernik 4096 Mar 11 09:14 firefox/tech
drwxr-xr-x 11 miernik miernik 4096 Mar 15 22:48 firefox/test
root@przehyba:~/.mozilla# 

답변:


7

3 년 후반의 답변으로 죄송합니다. 지금이 주제에 관심을 갖게되어이 질문을 찾았습니다.

문서화 된 솔루션을 찾지 못했습니다. 소스 코드를 확인했으며 여기에 매우 관련이 있습니다 : http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537

여기서 줄 끝의 nullptr은 불행히도 프로필 인수가 SendCommandLine 함수에 전달되지 않음을 의미하므로 openurl 메시지를 보낼 올바른 firefox 창을 선택할 수 없습니다.

그러나 사용자 이름이 전달되고 있으며 사용자 이름이 LOGNAME 환경 변수에서 비롯된 것입니다. 이를 바탕으로 다음과 같은 해결책을 찾았습니다.

  • firefox.sh라는이 스크립트로 파이어 폭스를 포장합니다.
FOX_PROFILE = 페이스 북
LOGNAME = errge. $ FOX_PROFILE 내보내기
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
  • 처음 실행될 때 새 인스턴스를 시작하고 ~ / .mozilla_profiles / facebook 디렉토리가 존재해야합니다.

  • 페이스 북 프로필이 이미 실행중인 경우 두 번째로 실행될 때 올바르게 연결됩니다.

  • 여러 실행중인 프로파일로 명령을 올바르게 보낼 수 있습니다 (물론 다른 스크립트의 첫 번째 행에서 FOX_PROFILE 매개 변수를 변경해야합니다).

Linux에서 Firefox 26으로 이것을 테스트했으며 작동합니다.

또는 다음은 귀하가 원하거나 사용하지 않을 수있는 본격적인 솔루션입니다.

#! / bin / bash

세트 -e

FOX = / opt / firefox / firefox

메시지 = $ @

[-z "$ FOX_PROFILE"] 인 경우; 그때
  [-z "$ {MESSAGE}"] 인 경우; 그때
    FOX_PROFILE = 기본
  그밖에
    FOX_PROFILE = $ (kdialog --default default --menu "-$ {MESSAGE}-"기본 기본 Google Google 페이스 북 페이스 북 오류 이메일 오류 스팸)
  fi
fi
FOX_PROFILE 내보내기

#이 핵은 파이어 폭스 원격 명령 행 전송 때문에 필요합니다
#은 프로필 매개 변수를 무시합니다. nsAppRunner.cpp : 1505를 참조하십시오.
LOGNAME = errge. $ FOX_PROFILE 내보내기

# exec 대신 백그라운드 실행을 사용하므로 동작은
# 프로필이 이미 실행 중일 때와 일관성이있을 때 일관성
# 시작.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"

# 큰 성공.
출구 0

매개 변수없이 스크립트를 실행하면 기본 프로필이 자동 선택되지만 셸에서 FOX_PROFILE을 수동으로 설정하여 재정의 할 수 있습니다. 명령 행에 URL이 전달되면 항상 URL을 열 프로파일을 요청합니다. 주로 채팅 및 이메일 프로그램에서 클릭하여 클릭하기 때문에 항상 프로파일 (달력 용 Google)을 선택하고 싶기 때문입니다. 스팸, 생일 스팸 용 페이스 북 등). 물론 사용 스타일에 맞게 로직을 변경할 수 있습니다. 이것은 단지 예일뿐입니다. 중요한 지식은 LOGNAME 트릭입니다.

물론이 래퍼 스크립트가 컴퓨터에서 브라우저를 시작하는 유일한 방법인지 확인해야합니다. 올바른 LOGNAME을 설정하지 않고 프로필을 열면 더 이상 해당 프로필과 통신 할 수 없습니다. x-www-browser, firefox, sensible-browser와 같은 여러 심볼릭 이름을 통해이 스크립트를 경로에 가장 먼저 넣고 BROWSER 환경 변수에도 넣었습니다. 이 작업을 수행하는 방법은 GNU / Linux 배포판에 따라 다릅니다.


정말 감사합니다. 프로필 설정이 필요하지 않으며 LOGNAME 설정으로 올바른 작업을 수행하는 것으로 충분합니다.
dset0x

0

인스턴스가 이미 실행중인 경우 Firefox에서이를 재사용합니다. 시도하십시오 firefox -no-remote.


그러나 인스턴스를 재사용하고 싶습니다! 좋아하는 임의의 것이 아니라 특정 것만. "-no-remote"를 명령에 추가하려고하면 "Iceweasel이 이미 실행 중이지만 응답하지 않습니다. 새 창을 열려면 먼저 기존 Iceweasel 프로세스를 닫거나 시스템을 다시 시작해야합니다."
miernik

아, 더 재미 있어요. 어떻게 할 수 있을지 모르겠습니다. IIUC, -no-remote는 인스턴스 간 "토킹"을 비활성화합니다. 이는 목표를 초과하거나 전체적인 과잉 공격이 될 수 있지만 중앙 파일 또는 서버 URL 큐를 폴링하고 현재 프로파일에 대한 파일을 열 때 확장자를 작성할 수 있습니다. 그런 다음 모든 인스턴스에 해당 확장을 설치하십시오.
janmoesen

0

mie

"하지만 인스턴스를 재사용하고 싶습니다! 특정 인스턴스 만 마음에 드는 임의의 인스턴스가 아닙니다. 명령에"-no-remote "를 추가하려고하면"Iceweasel이 이미 실행 중이지만 응답하지 않습니다. 새 창을 열려면 먼저 기존 Iceweasel 프로세스를 닫거나 시스템을 다시 시작해야합니다. "

당신은이 프로필 디렉토리에 권한 문제를 ... 권한을 확인합니다. 다른 장소 (파티션 .. 디스크 ..)에서 복사 또는 이동 했습니까?

해결책:

루트가되어 맨 위로 실행하여 루트로 실행 중인지 확인하십시오. 그런 다음 프로필 디렉토리의 ls -ld (이것은 앞에 홈 (.)이 있어야합니다.)는 "ls -al"을 사용해야한다는 것을 의미합니다.

해당 디렉토리의 다른 권한을 확인하고 적절히 변경하십시오.

건배!


권한을 확인하고 결과를 편집하여 질문에 붙여 넣었습니다. 그런 문제가 아닙니다.
miernik

0

작동하지 않습니다. 두 개의 Mozilla 앱 인스턴스를 실행하는 유일한 방법은 두 번째 인스턴스 (일반적으로 MOZ_NO_REMOTE = 1)에 대한 원격 연결을 비활성화하는 것입니다. 즉, 새 페이지를 여는 것과 같이 다른 인스턴스와 통신 할 수있는 기능을 비활성화합니다.

따라서 no remote활성화 된 상태에서 새 앱을 열거 나 원격 액세스를 허용하는 인스턴스를 재사용 할 수 있습니다.


실제로 작동합니다. errge의 답변을 참조하십시오. 작동하지 않는다는 것은 무엇을 의미 합니까?
pts

0

다음 -no-remote과 같이 테스트 프로파일 호출에만 소프트웨어 프로파일 을 추가 할 수 있어야합니다 (소프트웨어 프로파일이 이미 열린 후).

firefox -P "test" -no-remote http://www.example.org/

그러면 다른 모든 링크가 다른 프로파일에서 원격으로 계속 열릴 수 있습니다.

이 솔루션이 작동하지 않으면을 사용하여 항상 테스트를 위해 별도의 사용자로 Firefox를 실행할 수 sudo -u있습니다. Firefox는 실제로 프로파일로이를 올바르게 처리 할 수 ​​있어야합니다.


이 대답은 -no-remote새 Firefox 인스턴스가 플래그로 시작되고 기존 Firefox 인스턴스가 이미 실행중인 경우 재사용해야 하기 때문에 좋지 않습니다 .
pts

0

기본 프로파일 또는 다른 프로파일로 Mozilla Firefox를 이미 연 경우 다음을 시도하십시오.

Path-To/firefox -remote openurl("http://www.example.org")

2.x에서 12.x까지 Mozilla Firefox에서 테스트 및 작업했습니다.


명령 줄에 사용할 필수 프로필이 포함되어 있지 않기 때문에이 답변은 좋지 않습니다.
pts

0

주어진 프로파일로 Firefox 인스턴스를 처음 시작할 때 다음 명령을 사용하십시오.

firefox -P foo -new-instance

위 명령 끝에 URL을 추가하여 열 수 있습니다. 나중에 해당 인스턴스에서 URL을 열려면 다음을 사용할 수 있습니다.

firefox -P foo -remote 'openurl(http://www.example.org)'

스크립트를 작성 중이고 위의 명령 중 어떤 명령을 호출하기 위해 해당 프로파일을 실행중인 인스턴스가 있는지 확인하려는 경우 다음을 사용할 수 있습니다.

firefox -P foo -remote 'ping()'

Linux에서 Firefox 34로 테스트했습니다.

Firefox에 현재 버그가있어서 메시지와 함께 오류가 발생합니다.

Error: Failed to send command: 500 command not parseable

-remote openurl()제어 tty없이 명령이 수행 된 경우 (예 : 데몬이 시작한 스크립트에서).

KDE의 .desktop 파일 (예 : 패널의 실행기)에서 스크립트를 시작할 때이 버그가 발생하여 "터미널에서 실행"옵션을 선택해야했습니다.


-1

레코드의 경우 한 가지 해결책은 다음과 같습니다. KDE에서 기본 브라우저를 다음 명령으로 실행하도록 설정했습니다.

firefox -P "default"

여기서 "default"는 매번 사용하려는 프로필입니다.

이제 인수없이 Firefox 인스턴스를 시작합니다 (기본 KDE Firefox 실행기). 그러면 Firefox가 정상적으로 열립니다. 이제 다른 프로파일을 열고 KDE 메뉴 편집기에서 다른 실행기를 만듭니다.

firefox -ProfileManager -no-remote %u

그러면 프로파일 매니저가 열리고 사용할 프로파일을 선택합니다.

채팅 클라이언트와 같은 앱에서 URL을 클릭하면 동시에 실행중인 여러 프로필에서 테스트 한 후 선택한 프로필에서 새 탭이 열립니다.

누군가가 이것이 도움이되기를 바랍니다 :).

그놈에서 테스트하지는 않았지만 복제 할 수 있기를 바랍니다.


1
이것은 질문에 대답하지 않습니다. OP는 스크립트와 다른 프로필로 파이어 폭스를 자동으로 시작하려고합니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.