Firefox, hai máy Linux, một máy chủ X


10

Tôi có một máy Linux tôi thường xuyên đăng nhập qua ssh (putty) từ Windows. Tôi đang chạy VcXsrv X-server trên máy tính để bàn Windows của mình. Tôi chủ yếu sử dụng điều này để chạy trình gỡ lỗi (ddd) và firefox để truy cập hệ thống đánh giá mã dựa trên web của chúng tôi. Thật tiện lợi khi sử dụng Linux firefox để tôi có thể khởi chạy nó từ một tập lệnh. Tôi thường khởi chạy cái này với "-new-tab" để không tiếp tục tạo các cửa sổ mới.

Bây giờ tôi đã có một máy Linux cập nhật mới mà tôi đang chạy cùng với máy cũ. Điều tôi nhận thấy là một số hành vi kỳ quặc: khi tôi khởi chạy phiên firefox mới nếu có một phiên bản đang chạy trên một trong hai máy thì nó sẽ sử dụng phiên đó.

Những gì tôi muốn có thể làm vẫn là khởi chạy dưới dạng một tab mới nhưng chỉ trong trường hợp firefox từ máy hiện tại, không phải là một phiên bản từ một máy khác sẽ hiển thị trên cùng một máy chủ X.

Tôi đã chơi xung quanh với nhiều cờ khác nhau bao gồm -no-remote, -new-dụ và cũng xác định và sử dụng các cấu hình cụ thể. Tuy nhiên tôi đã không thể có được kết quả mong muốn. Hoặc tôi nhận được hành vi mà tôi đã mô tả ở trên hoặc tôi gặp lỗi khi nói điều gì đó như "Firefox đã chạy nhưng không phản hồi, vui lòng đóng lại".

EDIT: Tôi đã được yêu cầu chỉnh sửa điều này để cung cấp một số ví dụ.

ĐỒNG Ý. Trong phần tiếp theo tôi sẽ đề cập đến M_OLD và M_NEW. Đây là những máy riêng biệt chạy các phiên bản Linux khác nhau với các phiên bản Firefox khác nhau (1.5 và 19). Tôi kết nối với cả hai thông qua một ứng dụng khách ssh có tên là Putty và đang chuyển tiếp X đến máy chủ X trên máy tính để bàn Windows của tôi. Chỉ có một máy chủ X tham gia.

Ví dụ 1:

Vì vậy, từ phiên putty của tôi đến M_OLD tôi chạy:

firefox www.google.com &

và từ phiên putty M_NEW của tôi, tôi chạy:

firefox www.imdb.com &

sau đó tôi nhận được một cửa sổ firefox 1.5 với hai tab. Nếu tôi làm tương tự ngược lại, tôi nhận được kết quả tương tự nhưng với firefox 19. Nói cách khác, như được mô tả trong một nhận xét bên dưới, lệnh đầu tiên khởi chạy một thể hiện của firefox, lần thứ hai chỉ cần cho cá thể hiện tại mở một tab mới. Ngay cả khi phiên bản đó nằm trên một máy khác, miễn là cùng một máy chủ X.

Tuy nhiên tôi không muốn điều này. Tôi muốn có các trường hợp riêng cho các máy riêng biệt. Vì thế:

Ví dụ 2:

Vì vậy, từ phiên putty của tôi đến M_OLD tôi chạy:

firefox -no-remote www.google.com &

và từ phiên putty M_NEW của tôi, tôi chạy:

firefox -no-remote www.imdb.com &

Bây giờ tôi có hai trường hợp riêng biệt của firefox. Tuy nhiên nếu sau đó tôi chạy trên M_NEW:

firefox -no-remote www.google.com &

Tôi sẽ nhận được

Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.

và ngay cả khi tôi cố gắng

firefox -no-remote -new-instance www.google.com &

hoặc chỉ

firefox -new-instance www.google.com &

sau đó tôi vẫn sẽ nhận được lỗi.

Điều tôi thực sự muốn - và có thể không thể - là có một phiên bản riêng cho mỗi máy nhưng nếu một URL mới được khởi chạy từ máy đó thì nó sẽ mở ra một tab mới. Dường như tôi chỉ có thể có một phiên bản với các tab mới cho mỗi URL hoặc một phiên bản cho mỗi máy, nhưng mỗi lần chỉ có một phiên bản.

Hy vọng rằng điều đó rõ ràng hơn.


Bạn có thể làm rõ? Máy Linux mới có liên quan như thế nào? Bạn đang chuyển tiếp X đến máy Windows của bạn phải không? Bạn có kết nối với cả hai hộp Linux cùng một lúc không? Vui lòng cung cấp thêm một số chi tiết về cách bạn kết nối với mỗi hộp.
terdon

OK, vậy khi sự cố xảy ra, bạn đã kết nối với cả hai máy có ssh -Xđúng không?
terdon

Có, tôi đang chuyển tiếp X đến máy Windows của mình. Có, tôi đã kết nối với cả hai. Máy mới có liên quan vì tôi cũng khởi chạy firefox từ nó. Tuy nhiên, thay vì khởi chạy một phiên bản mới của firefox, nó sẽ mở một tab mới trong thể hiện hiện tại - cái được khởi chạy từ máy cũ. Như thể quá trình firefox mới kiểm tra xem liệu firefox có chạy trên máy chủ X đó không và nếu có thì sẽ gửi cho nó một thông báo để mở một tab mới. Mà rất thông minh nhưng không phải là điều tôi muốn. "Cũ" và "mới" chỉ liên quan đến các phiên bản firefox rất khác nhau. Có lý?
PaulM

1
Những gì bạn mô tả là bình thường (như tôi đã phát hiện ra sự ngạc nhiên của mình), tôi không hiểu làm thế nào nó không cố định khi chạy với --no-remotemặc dù. Bạn có thể chỉnh sửa câu hỏi của mình và cho chúng tôi biết khi nào bạn nhận được thông báo "Firefox đã chạy" không? Chạy firefox -no-remote sẽ bắt đầu một phiên bản firefox mới chạy trên máy từ xa nhưng được hiển thị trên máy chủ X cục bộ của bạn.
terdon

1
Tôi nghĩ bạn cũng có thể phải thêm -p vd -p -no-remote. Điều này cho phép bắt đầu với một hồ sơ Fx mới. Xem các tùy chọn dòng lệnh . Để kết nối với quy trình Fx hiện tại, bạn có thể thử firefox https://www.mozilla.orghoặcfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Câu trả lời:


1

Các phiên bản Firefox khác biệt (ví dụ được tạo bằng --no-remote) phải có các cấu hình riêng biệt.

Tùy chọn 1: Tạo hai (hoặc nhiều) hồ sơ, một cho mỗi hệ thống chạy Firefox. Thí dụ

firefox --no-remote -CreateProfile localuser
firefox --no-remote -CreateProfile host2

Bây giờ bắt đầu firefox và chọn một hồ sơ khi khởi động

firefox --no-remote -P localuser

hoặc là

firefox --no-remote -P host1

Tùy chọn 2: Thiết lập giải pháp động để tạo hồ sơ "dùng một lần" khi khởi động, ví dụ: một sự gián đoạn dọc theo dòng:

TEMPPROFILE=$(date +%Y%m%d%H%M%S)
firefox --no-remote -CreateProfile $TEMPPROFILE 2>/tmp/.mozprofile.$TEMPPROFILE
firefox --no-remote -P $TEMPPROFILE

Bạn có thể muốn thêm các bước để xóa cấu hình tạm thời sau đó (Có thể tìm thấy direcotry để loại bỏ bằng cách phân tích cú pháp đầu ra từ lệnh CreatProfile, được lưu trữ thông qua lệnh trên trong /tmp/.mozprofile.$TEMPPROFILE


đã thử điều đó - xem "ví dụ 2"
PaulM

À đúng, đúng - các trường hợp riêng biệt phải sử dụng các cấu hình khác nhau.
Johan

"Tùy chọn" đầu tiên mà bạn đề xuất hoàn toàn không có ý nghĩa gì cả, vì vậy tôi đã đề xuất loại bỏ nó khỏi câu trả lời của bạn.
SamB

Mặc dù, trên thực tế, nó có thể hoạt động mà không có -no-remote...
SamB

0

Ok ... không biết điều này có hiệu quả không, nhưng đó là điều đầu tiên tôi thử:

Sẽ thế nào nếu bạn tạo tập lệnh thứ hai trên mỗi máy, không cố tạo tab mới, chỉ là một phiên bản mới. Nếu bạn không có FF hiện đang chạy trên máy đó, bạn sử dụng tập lệnh mới này, nhưng nếu nó đã chạy, bạn sử dụng tập lệnh cũ tạo tab mới.

Nếu điều này hoạt động, bạn có thể thực hiện một số phân tích cú pháp regex của đầu ra ps trong một tập lệnh để xem FF đã chạy trên máy chưa, và sử dụng công tắc -new-tab hoặc -no-remote, tùy thuộc vào điều gì tìm thấy; nhưng có lẽ bạn muốn đợi cho đến khi phương pháp này được thử nghiệm, vì đó là một lượng mã hóa hợp lý cho thứ gì đó có thể không hoạt động ....


Nghe có vẻ như nó có thể hoạt động - nhưng tôi đã từ bỏ việc này. M_OLD đang được ngừng hoạt động sớm.
PaulM

0

Nhìn vào XRemoteClient.cpp , tôi nghĩ bạn nên làm:

user@host1$ firefox -CreateProfile profile1

và:

user@host2$ firefox -CreateProfile profile2

Sau đó, khi bạn muốn đi đâu đó, hãy làm một cái gì đó như

user@host1$ firefox -P profile1 -new-tab http://example.com

hoặc, tốt, tôi nghĩ bạn có thể đoán phải làm gì trên host2.

Rõ ràng, bạn có thể chọn tên tốt hơn. Nó cũng không nên quan trọng như thế nào bạn tạo hồ sơ. Điều quan trọng là chỉ định một tên hồ sơ trên dòng lệnh mỗi khi bạn gọi nó, trong đó mỗi phiên bản có tên hồ sơ riêng.

Điều này thậm chí có thể làm việc .


0

Tôi có một giải pháp khá thanh lịch ở đây nếu bạn vẫn cần. Cho đến bây giờ, tôi có 5 phiên bản độc lập của firefox đang chạy và nhiều như tôi muốn.

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.