มีวิธีเข้าสู่โหมดผู้ใช้คนเดียวโดยไม่ต้องรีบูตเครื่องหรือไม่?


8

เหมือนกับ old-days-UNIX เมื่อคุณสามารถส่งคำสั่งไปยังinitและคุณกำลังจ้องมองที่หน้าจอข้อความสีดำพร้อมเชลล์สำหรับการใช้งานของคุณเอง ;)


หลังจากการทดสอบเป็นเวลาหลายชั่วโมงโดยใช้เวอร์ชันต่าง ๆ ของ OS X / macOS จาก 10.11.6 ถึง 10.14.2 โดยมีและไม่มีการเปิดใช้งาน SIP เครื่องทางกายภาพและเสมือนที่แตกต่างกันไม่ใช่ครั้งเดียวในหลายสิบครั้งทำให้sudo launchctl reboot userspace -spreform userpace ที่ประสบความสำเร็จ รีบูต! เพียงแค่ใส่โดยไม่คำนึงถึงแหล่งที่มาของเอกสารคำสั่งดังกล่าวไม่ได้และไม่ทำงานและดังนั้นโดยไม่คำนึงถึงข้อเท็จจริงที่ว่าคำตอบของคำถามนี้ได้รับการยอมรับอย่างไรก็ตามฉันไม่พบว่ามันทำงานได้และเป็นสาเหตุของการลงคะแนนของฉัน
user3439894

คำตอบของฉันระบุไว้อย่างชัดเจนว่า“ ทดสอบกับ El Captian” ซึ่งใช้ได้ คำตอบได้รับการแก้ไขอย่างหนักในขณะนี้ แต่ยังสามารถพบได้ในประวัติการแก้ไข เพียงแค่ใส่ฉันไม่ได้บอกว่ามันจะทำงานกับสิ่งอื่น
บทกวี

1
ฉันทดสอบภายใต้ El Capitan เช่นเดียวกับ Sierra, High Sierra และ Mojave ในกรณีที่ไม่มีsudo launchctl reboot userspace -spreform รีบูต userspace ที่ประสบความสำเร็จและใช้งานได้จาก Terminal ใน GUI! โปรดเคารพว่าไม่เพียง แต่ฉันใช้เวลาพลังงานและความพยายามอย่างมากเท่านั้นฉันยังแสดงเหตุผลที่ถูกต้องสำหรับ downvote ของฉันซึ่งแน่นอนว่าฉันไม่มีข้อผูกมัดที่จะทำเช่นนั้น ความจริงที่ว่าในสามระบบ Apple ที่แตกต่างกันคือ MacBook Pro, iMac และ MacBook Air ที่ใช้ El Capitan และต่อมามันไม่ทำงานสำหรับฉันตามที่โฆษณาไว้ที่นี่หรือในเอกสารประกอบ! AFAIC สำหรับฉันจบเรื่องราว
user3439894

ทำงานให้ฉัน ที่นี่: 15.6.0 x86_64 root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64. คุณพูดถึงเรื่องอะไร :) หรือถ้าคุณพูดถึงความเคารพที่คุณนับถือคำของฉันอยู่ที่ไหน :)
poige

แก้ไขคำตอบแล้ว คิดเกี่ยวกับการบันทึกวิดีโอและอัปโหลดไว้ใน youtube ;)
poige

คำตอบ:


5

ลองเปลี่ยนหน้าต่างล็อกอินเพื่อขอชื่อผู้ใช้จากนั้นป้อน> consoleในฐานะผู้ใช้ทั้งนี้ขึ้นอยู่กับความต้องการของคุณ

สิ่งนี้น่าจะถูกลบออกที่ 10.10 ดังนั้นคุณต้องบูตเพื่อกู้คืนหรือใช้ SSH หรือใช้แอพเทอร์มินัลหากบายพาสประเภท init ดั้งเดิมไม่ใช่สิ่งที่คุณต้องการ

และนี่ไม่ใช่โหมดผู้ใช้รูทจริงที่ต้องเกิดขึ้นก่อนในกระบวนการบู๊ตบน macOS ที่ทันสมัย


ดูเหมือนว่าฉันได้พบคำตอบที่แท้จริงสำหรับคำถามของฉัน จะตรวจสอบและตอบกลับ
poige

@poige แน่นอนว่าฉันไม่สามารถทำงานกับ Mojave ได้ (แต่ฉันไม่ได้ยุ่งกับค่าเริ่มต้นเขียน) อย่าลังเลที่จะแก้ไขคำตอบของฉันเพื่อให้ตรงกับที่คุณต้องการหรือตอบด้วยตนเองถ้าคำตอบที่ดีที่สุดเมื่อคุณทดสอบ .
bmike


> ไม่มีเอกสารวิธีการเปลี่ยนจากระบบปฏิบัติการที่บูตไปเป็นโหมดผู้ใช้คนเดียวโดยไม่ต้องรีบูต นั่นคือการเรียกร้องที่ผิดพลาด
poige

สวัสดี @poige อาจมีความสับสนว่าโหมดผู้ใช้คนเดียวคืออะไร มีคนหนึ่งตอบคำตอบของคุณและลดระดับลง 5 ข้อ รู้สึกอิสระที่จะทำคำตอบใหม่ถ้าคุณมีอย่างอื่นที่จะเพิ่ม? วิกิพีเดียกล่าวว่าโหมดผู้ใช้คนเดียวบน macOS จะเกิดขึ้นก่อนการบู๊ตดังนั้นฉันจึงเปิดให้คุณมีความหมายที่แตกต่างจากฉันในสิ่งที่คุณพิจารณาผู้ใช้คนเดียว แจ้งให้เราทราบหากฉันสามารถช่วยได้
bmike

3

ทฤษฎี

สรุปมีเอกสารในman launchctlวิธีที่จะบรรลุสวิตช์ดังกล่าวในโหมดเดียวที่ไม่มีเคอร์เนลรีบูต มันสามารถปรับใช้เช่นจากหน้าต่างเทอร์มินัลด้วยคำสั่ง SHELL:

sudo launchctl reboot userspace -s

การปฏิบัติ

El Capitan

ฉันทดสอบใน El Capitan บน Macbook Air 2015 ซึ่งใช้งานได้ แต่ฉันก็มีรายงานจากผู้ใช้ว่าความพยายามของเขาใน El Capitan นั้นไม่ประสบความสำเร็จ ข้อแตกต่างอย่างเดียวที่ฉันนึกได้คือ Retina ซึ่งต้องใช้โหมดกราฟิกที่แตกต่างกันหรือ somesuch ฉันไม่มี Macbook ที่มี Retina ที่ใช้ El Capitan ดังนั้นในตอนนี้ฉันไม่สามารถบอกอะไรได้มากกว่านี้ในการรองรับเวอร์ชันดังกล่าว

เทือกเขาสูงโมฮาวี

ความพยายามของฉันกับ High Sierra แสดงให้เห็นว่าฟังก์ชั่นนี้ใช้งานไม่ได้อีกต่อไป (เทียบกับ El Capitan) อีกครั้งอาจเป็นเพราะจอประสาทตามันไม่ชัดเจน โมฮาวีไม่ได้ทำงานด้วย


คำอธิบายอย่างละเอียดโดยผู้มีส่วนร่วม¹

มีวิธีการย้อนกลับสู่โหมดผู้ใช้คนเดียวจาก macOS ที่ทำงานอยู่และทำงานอยู่โดยไม่ต้องรีบูตเต็มโดยทำงาน

sudo launchctl reboot userspace -s

สิ่งนี้จะเปิดใช้งานเฉพาะส่วน userspace ของ macOS โดยไม่ต้องรีสตาร์ทเคอร์เนลดาร์วินและเทียบเท่ากับการเปลี่ยน runlevel ใน old-day-UNIXes

สำหรับรายละเอียดเพิ่มเติมดูman launchctl:

reboot [system|userspace|halt|logout|apps|reroot ]
    Instructs launchd to begin tearing down userspace. With no argu-
    ment given or with the system argument given, launchd will make
    the reboot(2) system call when userspace has been completely
    torn down. With the halt argument given, launchd will make the
    reboot(2) system call when userspace has been completely torn
    down and pass the RB_HALT flag, halting the system and not ini-
    tiating a reboot.

    With the userspace argument given, launchd will re-exec itself
    when userspace has been torn down and bring userspace back up.
    This is useful for rebooting the system quickly under conditions
    where kernel data structures or hardware do not need to be re-
    initialized.

    -s       When rebooting the machine (either a full reboot or
             userspace reboot), brings the subsequent boot session
             up in single-user mode.

ซึ่งหมายความว่าในระดับเทคนิคsudo launchctl reboot userspace -sไม่ได้เรียกreboot(2)ดังนั้นจึงมีวิธีเปลี่ยนเป็นโหมดผู้ใช้คนเดียวโดยไม่ต้องรีบูต

นอกจากนี้บทความ Wikipedia ในโหมดผู้ใช้คนเดียวก็บอกว่า

ใน OS X El Capitan และรุ่นต่อมาของ MacOS, โหมดสามารถกลับไปที่โหมดผู้ใช้คนเดียวกับคำสั่งsudo launchctl reboot userspace -sใน Terminal sudo launchctl reboot system -sและระบบสามารถบูตได้อย่างเต็มที่ในโหมดผู้เดียวกับคำสั่ง


1 - ความอนุเคราะห์ของ @ nohillside

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