Score:1

คำสั่ง who ไม่สร้างเอาต์พุตบน WSL2

ธง it

ฉันใช้ Ubuntu 20.04 ในระบบย่อย Windows สำหรับ Linux บน Windows 10 เมื่อฉันพิมพ์ ใคร คำสั่งฉันไม่ได้รับผลลัพธ์:

renniej@ratitch:~$ whoami
เรนนี่
renniej@ratitch:~$ ใคร
renniej@ratitch:~$

ฉันได้ลองสิ่งต่าง ๆ เช่น sudo ใคร และ โว้ว แต่ฉันก็ยังไม่ได้รับผลลัพธ์ ใคร--เวอร์ชั่น ให้:

ใคร (GNU coreutils) 8.30
ลิขสิทธิ์ (C) 2018 Free Software Foundation, Inc.
ใบอนุญาต GPLv3+: GNU GPL เวอร์ชัน 3 หรือใหม่กว่า <https://gnu.org/licenses/gpl.html>
นี่เป็นซอฟต์แวร์ฟรี: คุณมีอิสระที่จะเปลี่ยนแปลงและแจกจ่ายซ้ำได้
ไม่มีการรับประกันตามขอบเขตที่กฎหมายอนุญาต

เขียนโดย Joseph Arceneaux, David MacKenzie และ Michael Stone

นี่ฉันมาทำอะไรโง่ๆ เหรอ? หรือนี่คือคุณสมบัติของ WSL2?

Score:1
ธง vn

คำตอบสั้น ๆ

ไม่มีอะไรโง่ มี ปัญหา Github ที่เกี่ยวข้องกับสาเหตุที่แท้จริง. ในขณะที่ทีม WSL เดิมติดแท็กว่า "โดยการออกแบบ" และ "คุณสมบัติ" แต่ก็มีกิจกรรมในปีที่แล้วที่ระบุว่าเป็น "มูลค่าสูงต้นทุนต่ำ"

อีกครั้ง เมื่อเร็ว ๆ นี้มีข้อสังเกตว่ามันถูกสร้างขึ้นเมื่อ 5 ปีที่แล้ว และไม่มี "ยกนิ้วให้" จากผู้ใช้รายอื่นที่ต้องการแก้ไข ฉันเดาว่าสิ่งนี้จะไม่เปลี่ยนแปลงจนกว่า WSL จะใช้วิธีการที่เหมือน Systemd มากขึ้นในการเริ่มต้น (ดูรายละเอียดด้านล่าง)

คำอธิบาย

... หรือมากกว่าที่คุณเคยอยากรู้ ใคร

มีเหตุผลสองประการ ใคร ไม่แสดงผลใดๆ:

  • ประการแรก สิ่งที่ชัดเจน -- ใคร ได้รับการออกแบบมาเพื่อแสดง (อ้างจากหน้าคน), "ใครเข้าสู่ระบบ" เมื่อคุณเริ่ม WSL จะไม่ส่งผู้ใช้ของคุณผ่านรหัสผ่านสำหรับเข้าสู่ระบบ ซึ่งเป็นเหตุผลที่คุณจะไม่ถูกถามถึงรหัสผ่าน

  • ประการที่สอง WSL ดำเนินการเอง /ในนั้น ประมวลผลเป็น PID1 เมื่อเริ่มต้น ซึ่งเป็น "เวทมนตร์" ในการตั้งค่าสิ่งต่างๆ เช่น:

    • เครือข่าย Linux สามารถเชื่อมต่อกับเครือข่าย Windows ได้
    • ติดตั้งไดรฟ์ Windows โดยอัตโนมัติ
    • การทำงานร่วมกันที่ช่วยให้ Windows .exeที่จะวิ่ง
    • และอื่น ๆ ...

    ในทางกลับกัน ระบบลีนุกซ์ "ปกติ" จะเริ่มต้นด้วย Systemd หรือ SysVInit (หรือระบบ init อื่นๆ ในช่วงหลายปีที่ผ่านมา) ระบบ init มีหน้าที่สร้าง runlevel เหนือสิ่งอื่นใด และพร้อมกับสิ่งนั้น (ฉันเพิ่งเรียนรู้สิ่งนี้ด้วยตัวเองจากปัญหา Github นั้น) /var/run/utmp สร้างซึ่งเป็นสิ่งที่ติดตามว่าใครกำลังใช้ระบบ

มีสองสามวิธีที่คุณสามารถ "บังคับ" ว่าใครทำงาน:

  • ข้อแรกครอบคลุมอยู่ในเธรด Github นั้น ขั้นแรกให้แฮ็ค /var/run/utmp ด้วยสิ่งที่ชอบ:

    sudo bash -c "echo '[1] [00049] [~~ ] [runlevel] [~ ] [4.4.0-17115-Micoroso] [0.0.0.0 ] [วันพุธที่ 28 กุมภาพันธ์ 13:27:14 2018 STD]' | utmpdump -r > /var/run/utmp"
    

    จากนั้นบังคับให้ "เข้าสู่ระบบ" ด้วย sudo เข้าสู่ระบบ -f $USER. จากนั้นคุณจะเห็นผู้ใช้ของคุณเข้าสู่ระบบโดยใช้ ใคร. หากคุณต้องเข้าสู่ระบบอีกครั้งผ่าน จุ๊ๆ (คุณต้องตั้งค่าก่อน) จากนั้นการเข้าสู่ระบบนั้นจะปรากฏขึ้นด้วย

  • ประการที่สอง คุณสามารถเริ่ม Systemd ในเนมสเปซ PID ของตัวเอง:

    sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=basic.target
    

    รอสักครู่เพื่อให้ Systemd เริ่มทำงาน จากนั้นระบบจะเริ่มต้น /var/run/utmp. ในทางเทคนิค ณ จุดนี้คุณสามารถทำได้ sudo เข้าสู่ระบบ -f $USER และดู ใคร.

    โปรดทราบว่า Systemd ไม่สามารถใช้งานได้อย่างสมบูรณ์หากไม่มีความพยายามเพิ่มเติม (เกินขอบเขตของคำตอบนี้) และคุณ ต้อง ยุติอินสแตนซ์ WSL ของ Ubuntu หลังจากทำเช่นนี้เพื่อให้กลับสู่สถานะเสถียร ออกจาก WSL จากนั้น wsl --terminate <distro> (ที่ไหน <distro> มีแนวโน้ม อูบุนตู). เมื่อคุณเริ่มสำรองข้อมูล ทุกอย่างจะกลับมาเป็นปกติ

โพสต์คำตอบ

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