Score:1

ไม่สามารถเปิดโค้ดวิชวลสตูดิโอได้เมื่ออยู่ภายในไดรฟ์ที่ติดตั้ง sshfs UBUNTU WSL

ธง ru

ฉันประสบปัญหาในการเปิดรหัส Visual Studio

สถานการณ์คือฉันติดตั้งระบบไฟล์เซิร์ฟเวอร์ในเครื่องคอมพิวเตอร์ของฉัน (UBUNTU WSL) โดยใช้ SSHFS

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

/mnt/c/Users/kurti/AppData/Local/Programs/Microsoft VS Code/Code.exe: อาร์กิวเมนต์ไม่ถูกต้อง

น่าแปลกที่ฉันสามารถใช้ gedit ในลักษณะเดียวกันได้โดยไม่มีปัญหาใดๆ เช่น gedit <ชื่อไฟล์>.

สิ่งที่แปลกก็คือฉันสามารถใช้รหัสเพื่อเปิดไฟล์ / ไดเร็กทอรีในระบบไฟล์เซิร์ฟเวอร์เมื่อฉันเป็นโฟลเดอร์ใด ๆ ในระบบไฟล์ในเครื่องของฉัน ด้วยวิธีนี้ฉันสามารถเปิดไฟล์เซิร์ฟเวอร์ได้อย่างง่ายดายโดยใช้ รหัส </full/path/to/file>.

นี่เป็นจุดบกพร่องที่เป็นไปได้ในรหัส Visual Studio หรือปัญหากับระบบของฉัน ?

แก้ไข: ฉันสร้างงานใหม่เกี่ยวกับฟังก์ชัน/คำสั่งซึ่งก็คือ
ชื่อคำสั่ง: vcode

#!/bin/bash
fpath=$(เรียลพาธ $1)
(cd $HOME; รหัส fpath)

อัปเดต: ฉันรายงานในหน้า WSL github ว่าเป็นปัญหา https://github.com/microsoft/WSL/issues/7890

รายละเอียดเฉพาะเพิ่มเติมดังนี้

ขั้นตอนการซื้อซ้ำ

ในเทอร์มินัล WSL

  1. เมานต์ระบบไฟล์เซิร์ฟเวอร์โดยใช้ sshfs (ในกรณีของฉันคือซูเปอร์คอมพิวเตอร์ของมหาวิทยาลัย)
    sshfs -C <เซิร์ฟเวอร์_ชื่อ_และ_ip> <เมานต์_ตำแหน่ง>
    mount_location ที่กำหนดเป็นไดเร็กทอรีว่างที่เรียกว่า smith_server พร้อมพาธ /home/k/smith_server/
  2. ไปที่ไดเรกทอรี ซีดี /home/k/smith_server
  3. เปิดไดเร็กทอรีในโค้ด Visual Studio รหัส

พฤติกรรมที่คาดหวัง

ลักษณะการทำงานที่คาดไว้คือ Visual Studio จะเปิดไดเร็กทอรี/ไฟล์โดยไม่คำนึงถึงไดเร็กทอรีการทำงานปัจจุบัน

พฤติกรรมจริง

ลักษณะการทำงานจริงคือเมื่อไดเร็กทอรีการทำงานปัจจุบันอยู่ภายในระบบไฟล์ของเซิร์ฟเวอร์ที่เมาท์ การเรียกใช้คำสั่ง รหัส หรือ รหัส <ชื่อไฟล์> จะส่งผลให้ รหัสข้อผิดพลาด.

/mnt/c/Users/kurti/AppData/Local/Programs/Microsoft VS Code/Code.exe: อาร์กิวเมนต์ไม่ถูกต้อง

ตัวอย่างบางส่วนที่กำลังทำงานอยู่

  1. เมื่อไดเร็กทอรีการทำงานไม่ได้เป็นส่วนหนึ่งของระบบไฟล์เซิร์ฟเวอร์ที่เมาท์ รหัส หรือ รหัส <ไฟล์> ทำงานได้ดี
  2. เมื่อไดเร็กทอรีทำงานไม่ได้เป็นส่วนหนึ่งของระบบไฟล์เซิร์ฟเวอร์ที่เมาท์ การใช้โค้ดไปยังเส้นทางแบบเต็มของไฟล์/ไดเร็กทอรีในระบบไฟล์เซิร์ฟเวอร์ เช่น รหัส /home/k/smith_server สามารถเปิดไฟล์ / ไดเร็กทอรีได้สำเร็จโดยไม่มีปัญหา
  3. เมื่อไดเร็กทอรีทำงานอยู่ภายในระบบไฟล์เซิร์ฟเวอร์ที่เมาท์ gedit <ไฟล์> ทำงานได้ดี
  4. เมื่อไดเร็กทอรีทำงานอยู่ภายในระบบไฟล์เซิร์ฟเวอร์ที่เมาท์ รหัส $HOME ยังได้รับข้อผิดพลาด

ข้อสรุปของฉันคือมีปัญหาเมื่อเรียกใช้คำสั่งรหัสเมื่ออยู่ในระบบไฟล์เซิร์ฟเวอร์ที่ติดตั้ง นอกจากนี้ สิ่งนี้จะไม่เกิดขึ้นเมื่อใช้ gedit อย่างไรก็ตาม เมื่ออยู่นอกระบบไฟล์เซิร์ฟเวอร์ที่เมาต์แล้ว ไฟล์ รหัส สามารถเรียกใช้คำสั่งและเข้าถึงระบบไฟล์ที่เมาท์ได้โดยใช้พาธแบบเต็ม อาจมีบางอย่างเกิดขึ้นเมื่อติดตามไฟล์ Code.exe ซอฟต์แวร์ที่ใช้ Linux เช่น gedit ไม่ได้รับผลกระทบ แต่บางทีซอฟต์แวร์ที่ใช้ Windows เช่น Code.exe ที่เพิ่งถูกเชื่อมต่อจะได้รับผลกระทบหรือไม่

cocomac avatar
cn flag
นี่อาจเป็นข้อผิดพลาดเกี่ยวกับวิธีการทำงานของ VS Code ใน WSL ฉันขอแนะนำให้ [ยื่นปัญหา GitHub](https://github.com/microsoft/WSL/issues/new?assignees=&labels=&template=Bug_Report.yaml) เพื่อรายงานเรื่องนี้
NotTheDr01ds avatar
vn flag
ฉันจะลองทำสิ่งนี้กับระบบของฉันในวันนี้ ดีใจที่เห็นคุณอย่างน้อยก็มีวิธีแก้ไข
ru flag
@cocomac ขอบคุณสำหรับคำแนะนำ ฉันส่งรายงานเกี่ยวกับ GitHub
ru flag
@NotTheDr01ds ขอบคุณ คุณสามารถดูขั้นตอนที่เฉพาะเจาะจงมากขึ้นในการอัปเดตหรือในปัญหาที่ฉันส่งมาใน GitHub
Score:2
ธง vn

ฉันสามารถทำซ้ำสิ่งนี้ได้อย่างง่ายดาย

สารละลาย:

  • ถอดตัวยึดฟิวส์ที่มีอยู่ออก:

    fusermount -u /home/k/smith_server
    
  • แก้ไข /etc/fuse.conf เป็นราก:

    sudo -e /etc/fuse.conf
    
  • ไม่แสดงความคิดเห็น user_allow_other ตัวเลือก

  • เติมเงินด้วย allow_root ตัวเลือก:

    sshfs -o allow_root [ผู้ใช้@]<remote_server>:/path /home/k/smith_server
    

รายละเอียดเพิ่มเติม:

โปรดทราบว่านี่ไม่ใช่แค่ปัญหาเกี่ยวกับ sshfs. คุณจะพบมันเมื่อเปิด VSCode จากภายใน ใดๆ ฟิวส์จุดเมานต์ตาม

ฉันไม่สุจริต ค่อนข้าง แน่ใจในสาเหตุที่แท้จริงที่นี่ แต่ ...

คุณจะสังเกตเห็นว่าหากไม่มีวิธีแก้ปัญหาข้างต้น หากคุณพยายามเรียกดู \wsl$\Ubuntu\home\k\smith_server\คุณจะไม่สามารถเข้าสู่ไดเร็กทอรีนั้นได้ คุณจะสามารถเข้าถึงโฮมไดเร็กตอรี่ของคุณ แต่คุณจะไม่สามารถเข้าถึงได้ smith_server.

นั่นบอกฉันว่าแม้ว่า Windows/WSL จะบังคับใช้สิทธิ์สำหรับ ของคุณ ผู้ใช้เมื่อเรียกดู (โดยค่าเริ่มต้น เว้นแต่คุณจะแทนที่สิ่งนี้ใน /etc/wsl.conf) ดูเหมือนว่าจะยังคงทำเช่นนั้น ราก ในพื้นหลัง.

ดังนั้น เมื่อเราเข้าใจแล้ว ก็ไม่แปลกใจเลยที่ VSCode ไม่สามารถจัดการการเรียกใช้จากไดเร็กทอรีที่ไม่มีอยู่จริงได้

นี้ ทำงาน เมื่อคุณเปิดใช้งานจาก $บ้าน เนื่องจาก VSCode เริ่มต้น จากนั้นจึงเปลี่ยนไปใช้ส่วนขยาย "ระยะไกล - WSL" ซึ่งจะสื่อสารกับเซิร์ฟเวอร์ VSCode ที่ติดตั้งในอินสแตนซ์ WSL ของคุณ (ใน ~/.vscode-เซิร์ฟเวอร์). เมื่อสิ่งนั้นเกิดขึ้น มันจะเข้าถึงระบบไฟล์ที่ติดตั้งฟิวส์เป็น ของคุณ ผู้ใช้และทุกอย่างมีความสุข

ต่อ ผู้ชายฟิวส์:

ไม่มีผู้ใช้รายอื่น (รวมถึงรูท) สามารถเข้าถึงเนื้อหาของระบบไฟล์ที่เมาท์

แต่มีตัวเลือกที่จะแทนที่สิ่งนี้ด้วย -o allow_other หรือ -o allow_root. และเพื่อเปิดใช้งานทั้งสองอย่างที่กล่าวมา /etc/fuse.conf ต้องตั้งค่าตัวเลือกให้เหมาะสม

จากนั้น VSCode จะสามารถเข้าถึงไดเร็กทอรีได้อย่างเหมาะสมเมื่อเปิดใช้งาน

คุณยังจะเห็นว่าตอนนี้คุณสามารถเรียกดูผ่าน Windows เพื่อ \wsl$\Ubuntu\home\k\smith_server\.

ru flag
ขอบคุณมากสำหรับความพยายาม มันช่วยได้จริง!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา