คำสั่ง startx ทำอะไร


18

ในขณะที่อ่านเกี่ยวกับ Ubuntu ฉันพบคำสั่งต่อไปนี้ .....

หากตัวจัดการหน้าจอไม่ได้เริ่มต้นตามค่าเริ่มต้นใน runlevel เริ่มต้นคุณสามารถเริ่ม X ด้วยวิธีอื่นหลังจากเข้าสู่คอนโซลโหมดข้อความโดยการเรียกใช้ startx จากบรรทัดคำสั่ง

การ runlevel เริ่มต้นหมายความว่าอย่างไร และเมื่อฉันลองสิ่งนี้บนเทอร์มินัลของฉันฉันได้รับสิ่งนี้:

anupam@JAZZ:~$ startx

X: user not authorized to run the X server, aborting.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

ฉันเพิ่งรัน startx แต่ฉันได้รับข้อผิดพลาดเดียวกับคุณดังนั้นฉันจึงทำมัน sudo เปลี่ยนมันทำให้ฉันเข้าสู่บัญชีรูท สิ่งที่ฉันทำเพื่อกลับสู่ผู้ใช้ของฉันคือออกจากระบบจากราก

คำตอบ:


25

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

คอมพิวเตอร์ Unix ส่วนใหญ่ใช้สำหรับการคำนวณทางวิทยาศาสตร์และการจำลองในสภาพแวดล้อมที่มีผู้ใช้หลายคนและส่วนต่อประสานกราฟิกที่ใช้งานอยู่จะช่วยลดหน่วยความจำและพลังงาน CPU ที่มีให้

ดังนั้นเมื่อคุณต้องการส่วนต่อประสานแบบกราฟิกคุณเพิ่งเริ่มต้นด้วยstartx(2)

startxพื้นวิ่งxserver (กราฟิก "คนขับรถ") และคำสั่งที่ทำงานในนั้นซึ่งโดยปกติจะเป็นตัวจัดการหน้าต่าง โดยค่าเริ่มต้นคำสั่งที่ทำงานอยู่ใน~/.xinitrcไฟล์ในโฮมไดเร็กตอรี่ของคุณ, หรือไฟล์ระบบทั่วไปบางอย่าง

ระบบยุคใหม่นั้นคิดจากล่างขึ้นบนเพื่อให้ระบบกราฟิกทำงานอยู่ตลอดเวลาดังนั้นจึงไม่มีใครตรวจสอบการทำงานของstartxวัยได้ซึ่งอธิบายพฤติกรรมแปลก ๆ มากมายที่คุณมี

หากคุณต้องการทดลองและรู้สึกถึงช่วงเวลาที่ดีเก่าสิ่งที่ดีที่สุดคือทำสิ่งต่อไปนี้:

A) การติดตั้งและXnest Xnestเป็นเซิร์ฟเวอร์กราฟิกภายในเซิร์ฟเวอร์เซิร์ฟเวอร์ชนิดหนึ่งที่จะเปิดเป็นหน้าต่างในระบบปกติของคุณ Fvwmเป็นผู้จัดการหน้าต่างที่เรียบง่ายซึ่งเป็นที่นิยมมากในตอนนั้น คุณจะต้องใช้แบบอักษร pixmap แบบเก่าเช่นกันfvwm

sudo apt-get install xnest fvwm 
sudo apt-get install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi-transcoded xfonts-75dpi 

B) เขียนไฟล์นี้ที่อื่นเช่นในบ้านคุณ dir และเรียกมันว่า~/test:

#!/bin/bash 
#
xterm & 
exec fvwm2

C) Run (สังเกตุ: startxโดยปกติแล้วจะรันด้วยคำสั่งไคลเอนต์ก่อนจากนั้นจะเป็น double dash และจากนั้นเป็นคำสั่งเซิร์ฟเวอร์ตามที่ฉันได้กล่าวไว้ระบบใหม่ส่วนใหญ่จะไม่มีค่าเริ่มต้นที่สมเหตุสมผลstartxเพียงอย่างเดียว)

cd ~
startx ~/test -- /usr/bin/Xnest -ac :1 -geometry 800x600

... และคุณมีหน้าจอเวิร์กสเตชัน 80ies:

ป้อนคำอธิบายรูปภาพที่นี่

(คุณสามารถมีเมนูได้โดยคลิกที่เดสก์ท็อป "Xnest")

... และถ้าคุณรู้สึกผจญภัยจริงๆคุณสามารถเริ่มต้นเซสชันเนทีฟบนคอนโซลเสมือนอื่น (อ่านคำตอบอื่น ๆ ) โดยไปที่หนึ่งในนั้นด้วย Ctrl-Alt-F1 เข้าสู่ระบบและ

startx ~/test 

ซึ่งปกติจะเปิดใน Ctrl-Alt-F8

ประกาศ : สภาพแวดล้อมเดสก์ท็อปสมัยใหม่ไม่ได้ออกแบบมาให้ทำงานพร้อมกันสำหรับผู้ใช้เดียวกันในคอนโซลที่แตกต่างกันสองแบบ ดังนั้นอย่าใช้gnome-shellหรือunityสิ่งที่ทันสมัยเมื่อทำการทดลองนี้หรือคุณอาจทำให้การกำหนดค่าของคุณยุ่งเหยิง


เชิงอรรถ:

(1) พูดประมาณปี 1980-90 ที่นี่

(2) ตัวอย่างเช่นฉันมีแล็ปท็อปที่มี RAM 256k มันช้าลงอย่างเจ็บปวดในอินเทอร์เฟซกราฟิก (B&W!) แต่เร็วในคอนโซล ดังนั้นผมจึงได้มากที่สุดของการทำงานของฉัน (แก้ไขC, LaTeXและไฟล์ที่คล้ายกัน) ในโหมดคอนโซลและเปลี่ยนไปสภาพแวดล้อมกราฟิกเฉพาะเมื่อจำเป็นจริงๆ


4
Thanx @ Rmano คำอธิบายที่ดีทั้งหมดได้มัน ...
ลาซารัส

9

startx เริ่ม xsession หรือส่วนต่อประสานแบบกราฟิกที่คุณเห็นหน้าจอเข้าสู่ระบบและอะไรมากกว่าคอนโซล ASCII (เซสชันข้อความ)

คุณได้รับข้อผิดพลาดนี้เนื่องจาก xsession เริ่มขึ้นแล้วและคุณพยายามเรียกใช้คำสั่งจากภายใน xsession บน tty7

tty7 เป็นอินเทอร์เฟซผู้ใช้ที่มีอยู่ที่ctrl+ alt+ f7(ค่าเริ่มต้น xsession)

tty1 คืออินเตอร์เฟซผู้ใช้ที่มีอยู่ที่ctrl+ +altf1

tty2 คืออินเตอร์เฟซผู้ใช้ที่มีอยู่ที่ctrl+ +alt f2. . และอื่น ๆ

tty1 - tty6 เป็นเซสชันข้อความและคุณสามารถเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่านของคุณในหนึ่งในหน้าจอเหล่านี้ หลังจากที่คุณเข้าสู่ระบบคุณสามารถเรียกใช้คำสั่งstartxและ xsession จะเริ่มใน tty7 หากยังไม่ได้ทำงานและ tty8 ถ้า tty7 กำลังทำงานอยู่แล้ว xsession


เรียกใช้ระดับ:

run-level 0 Halt - ปิดระบบ

run-level 1 โหมดผู้ใช้คนเดียว - โหมดสำหรับงานการดูแลระบบ

run-level 2 Graphical multi-user พร้อมระบบเครือข่าย - เริ่มต้นระบบตามปกติ

run-level 3-5 ไม่ได้ใช้ แต่กำหนดค่าเหมือนกับ runlevel 2

run-level 6 Reboot - รีบูตระบบ

คำว่า runlevel หมายถึงโหมดการทำงานในหนึ่งในระบบปฏิบัติการคอมพิวเตอร์ที่ใช้การกำหนดค่าเริ่มต้นในรูปแบบ Unix System V อัตภาพเจ็ด runlevels อยู่หมายเลขจากศูนย์ถึงหก; ถึงสิบจากศูนย์ถึงเก้าอาจถูกนำมาใช้ S บางครั้งใช้เป็นคำพ้องความหมายสำหรับหนึ่งในระดับ มีการดำเนินการ "runlevel" เพียงครั้งเดียวในการบูท - ระดับการรันไม่ได้ดำเนินการตามลำดับนั่นคือการรันทั้ง Runlevel 2 หรือ 3 หรือ 4 ไม่ใช่ 2 จาก 3 และ 4 จากนั้น - en.wikipedia.org/wiki/Runlevel


Thanx mchid มันช่วยฉันได้มาก
ลาซารัส

แต่เมื่อฉันเข้าสู่ระบบเพื่อ tty1 และดำเนินการ $ startx ฉันได้รับหน้าต่างเดสก์ท็อปโดยไม่มีตัวเรียกใช้งานและตัวเลือกอื่น ๆ ... (บน tty8) -ctrl + Alt + F8 นั่นคือ startx ของฉันไม่ได้รับการกำหนดค่าอย่างดี ตัวเลือกใน startx (เช่นที่นี่เฉพาะเดสก์ท็อป)
ลาซารัส

1
@jazzz นั่นคือสภาพแวดล้อม x เริ่มต้นของคุณ คุณมักจะติดตั้งสภาพแวดล้อมเดสก์ท็อปหลายแห่ง คุณควรจะสามารถ CTRL + T เพื่อรับขั้วเพื่อให้คุณสามารถเรียกใช้คำสั่งเหมือนunityหรือgnome-shell --replaceหรือแม้กระทั่งหรือgnome-panel metacity --replace
mchid

@jazzz และหากคุณยอมรับคำตอบนี้โปรดคลิกที่ไอคอนทางด้านซ้ายเพื่อปิด ขอบคุณ!
mchid

ขออภัยฉันสายไปซักถามอีกครั้งเกี่ยวกับเรื่องนี้ --- เป็นหน้าต่างใหม่ที่ฉันได้รับโดย Ctrl + Alt + F8 ตามที่ฉันระบุไว้ข้างต้นคล้ายกับพื้นที่ทำงานหรือไม่
ลาซารัส

4

มันก็หมายความว่าอย่างที่แตกต่างกันTTY

การถามคำถามที่เชื่อมโยง:

โดยค่าเริ่มต้นอูบุนตูมี 7 tty

1-6 เป็นบรรทัดคำสั่งเท่านั้น 7เซสชัน X ของคุณ (เดสก์ท็อปกราฟิกปกติของคุณ)

ในการเข้าถึงพวกเขาใช้แป้นพิมพ์ลัดนี้: Ctrl+ Alt+F1

(เปลี่ยนF1เป็น F1-F6 เพื่อเข้าถึงเทอร์มินัลที่คุณต้องการ)

ในการกลับไปที่เซสชัน X ของคุณ (เดสก์ท็อปปกติ) ให้ใช้: Ctrl+ Alt+F7

after logging on to a text-mode console หมายถึงการล็อกอินเข้าสู่ tty อื่นและพิมพ์คำสั่ง:

startx

1

ในฐานะที่เป็น Rmano บันทึก startx เป็นวิธีที่เก่าแก่มาก ย้อนกลับไปเมื่อสิ่งนี้ถูกใช้งานไบนารี X11 ถูกติดตั้ง setuid root

ฉันเพิ่งลองสิ่งนี้ใน VM และแน่นอนstartxล้มเหลวตามที่คุณอธิบายตามค่าเริ่มต้นchmod u+s /usr/lib/xorg/Xorgแก้ไขว่า

ฉันไม่แนะนำให้ทำการXorgsetuid root โลกได้ย้ายออกไปจากเหตุผลนั้น แต่ถ้าคุณกำลังเล่นกับ VM ที่ไม่ได้ใช้แล้วนั่นเป็นวิธีการstartxทำงาน


1

ตัวอย่างน้อยที่สุด QEMU + Buildroot

วิธีที่ฉันโปรดปรานในการเรียนรู้สิ่งที่ทำคือทำตัวอย่างเล็ก ๆ น้อย ๆ ที่เรียกใช้

บน Ubuntu นี่เป็นเรื่องยากเนื่องจากวินาทีที่สองstartxอาจขัดแย้งกับเดสก์ท็อปปัจจุบันของคุณ

/ubuntu//a/519164/52975เสนอXnestแต่ด้วย QEMU + Buildroot เราสามารถไปได้น้อยที่สุดและสร้าง micro distro เพียงติดตั้ง X11

วิธีนี้ควรง่ายต่อการเข้าใจสิ่งที่เกิดขึ้น

ฉันได้อธิบายการสร้าง distro ที่: /unix//a/306116/32558

เมื่อคุณได้ภาพที่ทำงานบน QEMU คุณจะเริ่มต้นด้วยเปลือก TTY

จากนั้นเมื่อคุณ:

root
startx

มันเริ่มต้น X11 GUI:

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้มาดูที่แหล่งที่มาสำหรับ startx distro นั้น ๆ ซึ่งเป็นเพียง shell script

มันเป็นเสื้อคลุมทับง่าย ๆ/usr/bin/xinitและมันก็ผ่าน/etc/X11/xinit/xinitrcไปxinitไป

ถ้าคุณเปิด/etc/X11/xinit/xinitrcมันมีบรรทัดต่อไปนี้:

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &

ดังนั้นเราจึงเห็นว่ามันเริ่มต้นขึ้น:

  • twm: ผู้จัดการหน้าต่างที่เรียบง่ายและเก่ามาก
  • xclockและxtermที่เราเห็นบนหน้าจอ

สำหรับ/usr/bin/xinitเราสามารถทำได้:

man xinit

ซึ่งบอกว่า:

หากไม่มีการระบุโปรแกรมไคลเอนต์เฉพาะในบรรทัดคำสั่ง xinit จะค้นหาไฟล์ในไดเรกทอรีหลักของผู้ใช้ชื่อ. xinitrc เพื่อเรียกใช้เป็นเชลล์สคริปต์เพื่อเริ่มโปรแกรมไคลเอนต์ หากไม่มีไฟล์ดังกล่าว xinit จะใช้สิ่งต่อไปนี้เป็นค่าเริ่มต้น:

xterm  -geometry  +1+1  -n  login  -display  :0

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

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