Làm cách nào để mở một URL trong Firefox trong một cấu hình cụ thể?


9

Tôi có một số phiên bản Firefox với một số cấu hình khác nhau đang chạy. Trong số đó có hồ sơ với tên "phần mềm" và "kiểm tra".

Tôi đang cố gắng mở một URL từ tập lệnh bash để mở nó trong hồ sơ "kiểm tra", như thế này:

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

Tuy nhiên, điều đó sẽ mở nó trong hồ sơ "phần mềm" nào. Có ý kiến ​​gì không?

Mozilla / 5.0 (X11; U; Linux x86_64; en-US; rv: 1.9.1.8) Tắc kè / 20100308 Iceweasel / 3.5.8 (như Firefox / 3.5.8)

Không, đó không phải là vấn đề về quyền, tất cả các thư mục hồ sơ của tôi hoàn toàn nằm dưới quyền của tôi:

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# 

Câu trả lời:


7

Xin lỗi vì câu trả lời trễ 3 năm, tôi mới bắt đầu quan tâm đến chủ đề này và tìm thấy câu hỏi này.

Tôi đã không tìm thấy một giải pháp tài liệu ở bất cứ đâu, vì vậy tôi đã kiểm tra mã nguồn và đây là một phần rất phù hợp: http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537

Ở đây, nullptr ở cuối dòng không may có nghĩa là đối số hồ sơ không được chuyển đến hàm SendCommandLine, do đó không thể chọn cửa sổ firefox chính xác để gửi thông điệp openurl tới.

Tuy nhiên, chúng tôi thấy rằng tên người dùng đang được thông qua và tên người dùng đang được đặt tên từ biến môi trường LOGNAME. Dựa trên điều này, tôi đã đưa ra giải pháp sau:

  • Tôi gói firefox với tập lệnh này, được gọi là firefox.sh:
FOX_PROFILE = facebook
xuất LOGNAME = errge. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
  • khi chạy lần đầu tiên, nó bắt đầu một phiên bản mới và thư mục ~ / .mozilla_profiles / facebook phải tồn tại,

  • Khi chạy lần thứ hai nếu hồ sơ facebook đang chạy, nó sẽ kết nối chính xác với nó,

  • nó có thể gửi các lệnh chính xác đến nhiều cấu hình đang chạy khác nhau (tất nhiên bạn phải thay đổi tham số FOX_PROFILE trong dòng đầu tiên trong các tập lệnh khác nhau).

Tôi đã thử nghiệm điều này với Firefox 26 trên Linux và nó hoạt động.

Ngoài ra, đây là giải pháp chính thức của tôi mà bạn có thể muốn hoặc không muốn sử dụng:

#! / bin / bash

đặt -e

FOX = / opt / firefox / firefox

TIN NHẮN = $ @

nếu [-z "$ FOX_PROFILE"]; sau đó
  if [-z "$ {TIN NHẮN}"]; sau đó
    FOX_PROFILE = mặc định
  khác
    FOX_PROFILE = $ (kdialog --default mặc định --menu "- $ {MESSAGE} -" mặc định google google facebook facebook facebook sai lầm spam spam spam)
  fi
fi
xuất FOX_PROFILE

# Hack này là cần thiết, bởi vì gửi dòng lệnh từ xa firefox
# bỏ qua tham số hồ sơ. Xem nsAppRunner.cpp: 1505.
xuất LOGNAME = errge. $ FOX_PROFILE

# Sử dụng thực thi nền thay vì thực thi, vì vậy hành vi là
# nhất quán khi hồ sơ đã chạy và khi nó chỉ
# bắt đầu lên.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"

# Thành công lớn.
thoát 0

Nếu bạn chạy tập lệnh mà không có bất kỳ tham số nào, nó sẽ tự động chọn cấu hình mặc định, nhưng bạn có thể ghi đè lên tập lệnh đó bằng cách đặt FOX_PROFILE bằng tay trong vỏ của bạn. Nếu một URL được truyền trong dòng lệnh, nó luôn yêu cầu một hồ sơ để mở nó, điều này là do tôi chủ yếu nhấp qua từ chương trình trò chuyện và email của mình và trong trường hợp đó tôi muốn luôn chọn một hồ sơ (google cho lịch spam, facebook cho sinh nhật spam, v.v.). Tất nhiên bạn có thể thay đổi logic để phù hợp với phong cách sử dụng của mình, đây chỉ là một ví dụ, kiến ​​thức quan trọng là thủ thuật LOGNAME.

Và tất nhiên bạn phải chắc chắn rằng tập lệnh trình bao bọc này là cách duy nhất để khởi động trình duyệt trên máy của bạn. Bởi vì nếu bạn mở một hồ sơ mà không có bộ LOGNAME chính xác, bạn sẽ không thể liên lạc với hồ sơ đó nữa. Tôi đặt tập lệnh này là đầu tiên trong đường dẫn của mình thông qua nhiều tên được liên kết, như trình duyệt x-www, firefox, trình duyệt hợp lý và cũng đặt nó trong biến môi trường BROWSER. Làm thế nào để làm điều này chính xác phụ thuộc vào bản phân phối GNU / Linux của bạn.


Cảm ơn rất nhiều vì điều này. Dường như với tôi, việc thiết lập hồ sơ là không cần thiết và cài đặt LOGNAME là đủ để thực hiện đúng.
dset0x

0

Nếu bạn đã có một phiên bản đang chạy, Firefox sẽ sử dụng lại nó. Hãy thử firefox -no-remote.


Nhưng tôi muốn nó sử dụng lại một ví dụ! Chỉ một cái cụ thể, không phải bất kỳ cái ngẫu nhiên nào nó thích. Nếu tôi đã thử thêm "-no-remote" vào lệnh của mình, tôi nhận được: "Iceweasel đã chạy, nhưng không phản hồi. Để mở một cửa sổ mới, trước tiên bạn phải đóng quy trình Iceweasel hiện có hoặc khởi động lại hệ thống của bạn."
miernik

Ah, điều đó làm cho nó thú vị hơn. Tôi sợ tôi không biết làm thế nào bạn có thể làm điều đó. IIUC, -no-từ xa vô hiệu hóa "nói chuyện" giữa các trường hợp. Điều này có thể thoát khỏi mục tiêu và tổng mức quá mức, nhưng bạn có thể tạo một tiện ích mở rộng thăm dò một tệp trung tâm hoặc hàng đợi URL của máy chủ và mở nó khi nó có ý nghĩa cho cấu hình hiện tại. Sau đó, bạn cài đặt tiện ích mở rộng đó trong tất cả các phiên bản của bạn.
janmoesen

0

@miemik

"Nhưng tôi muốn nó sử dụng lại một thể hiện! Chỉ một trường hợp cụ thể, không phải bất kỳ trường hợp ngẫu nhiên nào nó thích. Nếu tôi đã thử thêm" -no-remote "vào lệnh của mình, tôi nhận được:" Iceweasel đã chạy, nhưng không phản hồi. Để mở một cửa sổ mới, trước tiên bạn phải đóng quy trình Iceweasel hiện có hoặc khởi động lại hệ thống của mình. "

Bạn có một vấn đề về quyền với thư mục hồ sơ của bạn ... kiểm tra sự cho phép. Bạn đã sao chép hoặc di chuyển nó từ bất kỳ nơi nào khác (phân vùng..disk ..)?

Giải pháp:

Trở thành root và chạy top để xem nếu nó chạy như root. Sau đó ls -ld trên thư mục hồ sơ (mà nên ở dưới thư mục nhà của bạn với một khoảng thời gian (.) Trước mặt họ..có nghĩa là bạn phải sử dụng "ls -al" để xem nó.

Xác nhận sự cho phép khác của thư mục đó và thay đổi cho phù hợp.

Chúc mừng!


Tôi đã kiểm tra các quyền và dán kết quả trong một chỉnh sửa cho câu hỏi của tôi. Đó không phải là vấn đề.
miernik

0

Nó sẽ không hoạt động. Cách duy nhất để có 2 phiên bản ứng dụng Mozilla chạy là bằng cách vô hiệu hóa các kết nối từ xa sang kết nối thứ hai (thường là với MOZ_NO_REMOTE = 1). Điều đó có nghĩa là bạn vô hiệu hóa khả năng nó có thể giao tiếp với các phiên bản khác (như một người đang tạo mở một trang mới).

Vì vậy, lựa chọn của bạn là để mở một ứng dụng mới no remoteđược kích hoạt hoặc sử dụng lại thể hiện cho phép truy cập từ xa.


Nó thực sự hoạt động, xem câu trả lời của errge. Bạn có ý nghĩa gì bởi nó sẽ không hoạt động ?
pts

0

Bạn chỉ có thể thêm -no-remotecuộc gọi hồ sơ kiểm tra (sau khi hồ sơ phần mềm đã mở) như thế này:

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

Điều đó sẽ cho phép tất cả các liên kết khác vẫn mở trong hồ sơ khác của bạn từ xa.

Nếu giải pháp này không hoạt động, bạn luôn có thể chạy Firefox như một người dùng riêng để thử nghiệm, sử dụng sudo -u. Firefox thực sự có thể xử lý việc này đúng cách với các cấu hình.


Câu trả lời này không thể tốt vì với -no-remotecờ, một phiên bản Firefox mới được bắt đầu và câu hỏi yêu cầu sử dụng lại các phiên bản Firefox hiện có nếu chúng đang chạy.
pts

0

Nếu bạn đã mở Mozilla Firefox với cấu hình Mặc định hoặc bất kỳ cấu hình nào khác, hãy thử:

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

Đã thử nghiệm và làm việc cho tôi với Mozilla Firefox từ 2.x đến 12.x


Câu trả lời này không thể tốt vì dòng lệnh không chứa cấu hình cần thiết để sử dụng.
pts

0

Lần đầu tiên bạn khởi động một phiên bản Firefox với một cấu hình đã cho, hãy sử dụng lệnh:

firefox -P foo -new-instance

Bạn có thể nối một URL ở cuối lệnh trên để mở nó. Sau này, khi bạn muốn mở một URL trong trường hợp đó, bạn có thể sử dụng:

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

Nếu bạn đang viết một tập lệnh và muốn tìm hiểu xem đã có một phiên bản nào chạy cấu hình đó để xem nên gọi lệnh nào ở trên chưa, bạn có thể sử dụng:

firefox -P foo -remote 'ping()'

Đã thử nghiệm với Firefox 34 trên Linux.

Lưu ý rằng hiện tại có một lỗi trong Firefox khiến nó bị lỗi với thông báo

Error: Failed to send command: 500 command not parseable

nếu -remote openurl()lệnh được thực hiện mà không có tty kiểm soát (ví dụ: từ tập lệnh được bắt đầu bởi trình nền).

Tôi gặp lỗi này khi khởi chạy tập lệnh từ tệp .desktop trong KDE (ví dụ: từ trình khởi chạy trong bảng điều khiển), vì vậy tôi phải đánh dấu vào tùy chọn "chạy trong thiết bị đầu cuối", điều này hơi khó chịu.


-1

Đối với bản ghi, một giải pháp là: trong KDE, chúng tôi đặt trình duyệt mặc định để chạy bằng lệnh sau:

firefox -P "default"

trong đó "mặc định" là hồ sơ của chúng tôi, chúng tôi muốn sử dụng mỗi lần.

Bây giờ, chúng tôi bắt đầu phiên bản Firefox của chúng tôi không có đối số (trình khởi chạy KDE Firefox mặc định). Điều này mở Firefox bình thường, bây giờ chúng tôi muốn mở một hồ sơ khác, để làm như vậy, chúng tôi tạo một trình khởi chạy khác trong trình chỉnh sửa menu KDE:

firefox -ProfileManager -no-remote %u

Điều này mở trình quản lý hồ sơ, chúng tôi chọn sử dụng hồ sơ.

Đã thử nghiệm trên một số cấu hình đồng thời chạy, khi chúng tôi nhấp vào một url từ bất kỳ ứng dụng nào (như ứng dụng trò chuyện), một tab mới sẽ được mở trong hồ sơ chúng tôi đã chọn.

Hy vọng ai đó tìm thấy điều này hữu ích :).

Không được thử nghiệm trên Gnome, nhưng tôi hy vọng nó có thể được nhân rộng.


1
Điều này không trả lời câu hỏi, OP muốn tự động khởi chạy firefox với các cấu hình khác nhau từ một tập lệnh.
terdon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.