วิธีการเปิด URL ใน Firefox จากโปรไฟล์ในระยะไกล


9

ฉันมี Firefox หลายอินสแตนซ์และมีโพรไฟล์ต่าง ๆ ทำงานอยู่ ในหมู่พวกเขาโปรไฟล์ที่มีชื่อ "ซอฟต์แวร์" และ "ทดสอบ"

ฉันพยายามเปิด URL จากสคริปต์ทุบตีเพื่อให้เปิดในโปรไฟล์ "ทดสอบ" เช่นนี้:

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 ดังนั้นจึงไม่สามารถเลือกหน้าต่าง firefox ที่ถูกต้องเพื่อส่งข้อความ openurl ไปที่

อย่างไรก็ตามเราเห็นว่าชื่อผู้ใช้กำลังถูกส่งผ่านและชื่อผู้ใช้จะถูก intiailized จากตัวแปรสภาพแวดล้อมของ LOGNAME จากสิ่งนี้ฉันคิดวิธีแก้ปัญหาต่อไปนี้

  • ฉันห่อ firefox ด้วยสคริปต์นี้ชื่อ firefox.sh:
FOX_PROFILE = Facebook
ส่งออก LOGNAME = errge $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
  • เมื่อวิ่งเป็นครั้งแรกมันจะเริ่มต้นอินสแตนซ์ใหม่และต้องมีไดเร็กทอรี ~ / .mozilla_profiles / facebook

  • เมื่อวิ่งเป็นครั้งที่สองหากโปรไฟล์ Facebook ทำงานอยู่มันจะเชื่อมต่อกับมันอย่างถูกต้อง

  • มันสามารถส่งคำสั่งอย่างถูกต้องไปยังโปรไฟล์การทำงานที่แตกต่างกันหลายรายการ (แน่นอนว่าคุณต้องเปลี่ยนพารามิเตอร์ FOX_PROFILE ในบรรทัดแรกในสคริปต์ที่แตกต่างกัน)

ฉันทดสอบสิ่งนี้ด้วย Firefox 26 บน Linux และใช้งานได้

หรือนี่คือโซลูชันเต็มรูปแบบของฉันที่คุณอาจต้องการหรือไม่ต้องการใช้:

#! / bin / ทุบตี

ชุด -e

ฟ็อกซ์ = / opt / Firefox / Firefox

MESSAGE = $ @

ถ้า [-z "$ FOX_PROFILE"]; แล้วก็
  ถ้า [-z "$ {MESSAGE}"]; แล้วก็
    FOX_PROFILE = เริ่มต้น
  อื่น
    FOX_PROFILE = $ (kdialog - ค่าเริ่มต้นเริ่มต้น - เมนู "- $ {MESSAGE} -" ค่าเริ่มต้น google google facebook facebook facebook errge err spam spam)
  Fi
Fi
ส่งออก FOX_PROFILE

# แฮ็คนี้จำเป็นเนื่องจากการส่งคำสั่งจากระยะไกลของ firefox
# ละเว้นพารามิเตอร์โปรไฟล์ ดู nsAppRunner.cpp: 1505
ส่งออก LOGNAME = errge $ FOX_PROFILE

# การใช้การเรียกใช้พื้นหลังแทนการใช้ exec
# สอดคล้องกันเมื่อโปรไฟล์กำลังทำงานและเมื่อเป็นเพียง
# เริ่มต้นขึ้น
$ FOX - โปรไฟล์ ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"

# ประสบความสำเร็จอย่างมาก.
ออก 0

หากคุณเรียกใช้สคริปต์โดยไม่มีพารามิเตอร์ใด ๆ สคริปต์จะเลือกโปรไฟล์เริ่มต้นโดยอัตโนมัติ แต่คุณสามารถลบล้างสคริปต์ได้โดยการตั้งค่า FOX_PROFILE ด้วยมือในเชลล์ของคุณ หากมีการส่ง URL ในบรรทัดคำสั่งมันจะถามโปรไฟล์ที่จะเปิดเสมอเพราะฉันคลิกผ่านจากโปรแกรมแชทและอีเมลเป็นหลักและในกรณีนั้นฉันต้องการเลือกโปรไฟล์เสมอ (google สำหรับปฏิทิน สแปม, Facebook สำหรับวันเกิดสแปม ฯลฯ ) แน่นอนคุณสามารถเปลี่ยนตรรกะเพื่อให้เหมาะกับสไตล์การใช้งานของคุณนี่เป็นเพียงตัวอย่างความรู้ที่สำคัญคือเคล็ดลับ 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 ปิดใช้งาน "การพูดคุย" ระหว่างอินสแตนซ์ นี่อาจเป็นวิธีปิดเป้าหมายและ overkill ทั้งหมด แต่คุณสามารถสร้างส่วนขยายที่สำรวจไฟล์กลางหรือคิว URL เซิร์ฟเวอร์และเปิดเมื่อมีความหมายสำหรับโปรไฟล์ปัจจุบัน จากนั้นคุณติดตั้งส่วนขยายนั้นในทุกอินสแตนซ์ของคุณ
janmoesen

0

@miemik

"แต่ฉันต้องการให้อินสแตนซ์นำกลับมาใช้ใหม่เฉพาะตัวอย่างที่เฉพาะเจาะจงไม่ใช่แบบสุ่มใด ๆ ที่มันชอบถ้าฉันลองเพิ่ม" -no-remote "ในคำสั่งของฉันฉันจะได้รับ:" Iceweasel กำลังทำงานอยู่ แต่ไม่ตอบสนอง ในการเปิดหน้าต่างใหม่คุณต้องปิดกระบวนการ Iceweasel ที่มีอยู่ก่อนหรือรีสตาร์ทระบบของคุณ "

คุณมีปัญหาการอนุญาตกับโปรไฟล์ของคุณ dir ... ตรวจสอบสิทธิ์ คุณคัดลอกหรือย้ายจากที่อื่น (partition..disk .. ) ไหม

สารละลาย:

เป็นรูทและวิ่งขึ้นไปด้านบนเพื่อดูว่ามันทำงานเหมือนรูทหรือไม่ จากนั้น ls -ld บนโปรไฟล์ dir (ซึ่งควรอยู่ภายใต้ ur home dir ที่มีเครื่องหมายจุด (.) อยู่ข้างหน้าพวกเขา .. หมายถึงคุณต้องใช้ "ls -al" เพื่อดู

ตรวจสอบการอนุญาตอื่น ๆ ของ dir นั้นและเปลี่ยนแปลงตามนั้น

ไชโย!


ฉันตรวจสอบการอนุญาตและวางผลลัพธ์ในการแก้ไขคำถามของฉัน มันไม่ใช่ปัญหานั้น
miernik

0

มันจะไม่ทำงาน วิธีเดียวที่จะมีการเรียกใช้แอป Mozilla 2 อินสแตนซ์ได้คือการปิดใช้งานการเชื่อมต่อระยะไกลไปยังอันที่สอง (โดยปกติจะมี MOZ_NO_REMOTE = 1) ซึ่งหมายความว่าคุณปิดการใช้งานความสามารถในการสื่อสารกับอินสแตนซ์อื่น ๆ (เช่นการสร้างการเปิดหน้าใหม่)

ดังนั้นตัวเลือกของคุณคือเปิดแอปใหม่ที่no remoteเปิดใช้งานหรือใช้อินสแตนซ์ที่อนุญาตให้เข้าถึงจากระยะไกล


มันใช้งานได้จริงดูคำตอบของ errge คุณหมายถึงอะไรโดยมันจะไม่ทำงาน ?
จุด

0

คุณควรจะเพิ่มการโทร-no-remoteไปยังโปรไฟล์การทดสอบเท่านั้น (หลังจากโปรไฟล์ซอฟต์แวร์เปิดอยู่แล้ว) เช่นนี้:

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

ซึ่งควรอนุญาตให้ลิงก์อื่น ๆ ทั้งหมดยังคงเปิดอยู่ในโปรไฟล์อื่นของคุณจากระยะไกล

หากแก้ปัญหานี้ไม่ทำงานคุณก็สามารถเรียกใช้ Firefox sudo -uเป็นผู้ใช้แยกต่างหากสำหรับการทดสอบโดยใช้ Firefox ควรจะสามารถจัดการกับโปรไฟล์ได้อย่างเหมาะสม


คำตอบนี้ไม่สามารถทำได้ดีเนื่องจากมีการ-no-remoteตั้งค่าสถานะอินสแตนซ์ Firefox ใหม่และคำถามต้องใช้อินสแตนซ์ Firefox ที่มีอยู่อีกครั้งหากพวกเขากำลังทำงานอยู่
จุด

0

หากคุณมี Mozilla Firefox เปิดอยู่แล้วพร้อมกับโปรไฟล์เริ่มต้นหรือโปรไฟล์อื่น ๆ ลอง:

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

ผ่านการทดสอบและใช้งานได้กับ Mozilla Firefox จาก 2.x ถึง 12.x


คำตอบนี้ไม่ดีเพราะบรรทัดคำสั่งไม่มีโปรไฟล์ที่ต้องการใช้
จุด

0

ครั้งแรกที่คุณเริ่มต้นอินสแตนซ์ Firefox ด้วยโปรไฟล์ที่กำหนดให้ใช้คำสั่ง:

firefox -P foo -new-instance

คุณสามารถผนวก URL ท้ายคำสั่งด้านบนเพื่อเปิด หลังจากนั้นเมื่อคุณต้องการเปิด URL ในอินสแตนซ์นั้นคุณสามารถใช้:

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

หากคุณกำลังเขียนสคริปต์และต้องการทราบว่ามีอินสแตนซ์ที่ใช้งานโปรไฟล์นั้นอยู่แล้วเพื่อดูว่าคำสั่งใดที่ควรเรียกใช้คุณสามารถใช้:

firefox -P foo -remote 'ping()'

ทดสอบกับ Firefox 34 บน Linux

โปรดทราบว่าขณะนี้มีข้อผิดพลาดใน Firefox ซึ่งทำให้เกิดข้อผิดพลาดกับข้อความ

Error: Failed to send command: 500 command not parseable

หาก-remote openurl()คำสั่งถูกสร้างโดยไม่มี tty ควบคุม (เช่นจากสคริปต์ที่เริ่มต้นโดย daemon)

ฉันพบข้อผิดพลาดนี้เมื่อเรียกใช้สคริปต์จากไฟล์ .desktop ใน KDE (เช่นจากตัวเรียกใช้งานในพาเนล) ดังนั้นฉันต้องติ๊กตัวเลือก "รันในเทอร์มินัล" ซึ่งน่ารำคาญเล็กน้อย


-1

สำหรับบันทึกหนึ่งวิธีแก้ไขคือใน KDE เราได้ตั้งค่าเบราว์เซอร์เริ่มต้นให้ทำงานด้วยคำสั่งต่อไปนี้:

firefox -P "default"

โดยที่ "default" เป็นโปรไฟล์ของเราที่เราต้องการใช้ในแต่ละครั้ง

ตอนนี้เราเริ่มต้นอินสแตนซ์ Firefox โดยไม่มีข้อโต้แย้ง (ตัวเรียกใช้เริ่มต้นของ KDE Firefox) สิ่งนี้จะเปิด Firefox ตามปกติตอนนี้เราต้องการเปิดโปรไฟล์อื่นเพื่อทำเช่นนั้นเราได้เปิดตัวอื่นในโปรแกรมแก้ไขเมนู KDE:

firefox -ProfileManager -no-remote %u

นี่เป็นการเปิดตัวจัดการโปรไฟล์เราเลือกโปรไฟล์ที่จะใช้

ทดสอบกับโปรไฟล์หลายโปรไฟล์ที่ทำงานพร้อมกันเมื่อเราคลิกที่ url จากแอพใด ๆ (เช่นไคลเอนต์แชท) แท็บใหม่จะเปิดขึ้นในโปรไฟล์ที่เราเลือก

หวังว่าบางคนพบว่ามีประโยชน์ :)

ไม่ได้ทดสอบกับ Gnome แต่ฉันหวังว่ามันสามารถทำซ้ำได้


1
สิ่งนี้ไม่ตอบคำถาม OP ต้องการเปิด firefox ด้วยโปรไฟล์ที่แตกต่างจากสคริปต์โดยอัตโนมัติ
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.