Lệnh startx làm gì?


18

Trong khi đọc về Ubuntu tôi đã tìm thấy tuyên bố sau .....

Nếu trình quản lý hiển thị không được khởi động theo mặc định trong runlevel mặc định, bạn có thể khởi động X theo một cách khác, sau khi đăng nhập vào bảng điều khiển chế độ văn bản, bằng cách chạy startx từ dòng lệnh.

Một runlevel mặc định có nghĩa là gì? Và khi tôi thử cái này trên thiết bị đầu cuối của mình, tôi đã nhận được cái này:

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

Tôi mới chạy startx nhưng tôi gặp lỗi giống như bạn nên tôi đã làm nó sudo. Biến nó đăng nhập tôi vào tài khoản root. Những gì tôi đã làm để trở về với người dùng của mình là đăng xuất từ ​​root.

Câu trả lời:


25

Ngày xửa ngày xưa (1), khi bộ nhớ của các máy tính được đo bằng kilobyte và các đĩa tính bằng megabyte, chạy giao diện đồ họa mọi lúc được coi là có hại.

Hầu hết các máy tính Unix được sử dụng để tính toán và mô phỏng khoa học trong môi trường nhiều người dùng và giao diện đồ họa chạy trên chúng sẽ làm giảm bộ nhớ và sức mạnh CPU có sẵn cho chúng.

Vì vậy, khi bạn cần một giao diện đồ họa, bạn chỉ cần bắt đầu với startx(2).

startxvề cơ bản chạy Xserver ("trình điều khiển" đồ họa) và một lệnh chạy trên nó, thường là trình quản lý cửa sổ . Theo mặc định, các lệnh được chạy trong ~/.xinitrctệp trong thư mục chính của bạn hoặc một số tệp hệ thống chung khác.

Các hệ thống hiện đại được cho là từ dưới lên có hệ thống đồ họa hoạt động mọi lúc, vì vậy không ai có thể kiểm tra hoạt động của startxcác lứa tuổi - điều đó giải thích rất nhiều hành vi kỳ lạ mà bạn có thể có.

Nếu bạn muốn thử nghiệm và cảm thấy thời xưa tốt đẹp, điều tốt nhất là làm như sau:

A) cài đặt Xnestfvwm. Xnest là một máy chủ đồ họa trong máy chủ, một loại máy chủ sẽ mở dưới dạng cửa sổ trong hệ thống bình thường của bạn. Fvwm là một trình quản lý cửa sổ rất đơn giản và rất phổ biến trước đó. Bạn cũng sẽ cần phông chữ pixmap cũ.

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

B) viết tập tin này ở đâu đó, ví dụ như trong thư mục nhà của bạn và gọi nó ~/test:

#!/bin/bash 
#
xterm & 
exec fvwm2

C) Chạy (thông báo: startxthường được chạy với lệnh máy khách đầu tiên, sau đó là dấu gạch ngang kép và sau đó là lệnh máy chủ. Như tôi đã nói, hầu hết các hệ thống mới không có mặc định hợp lý cho startxriêng mình.).

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

... và bạn có màn hình máy trạm 80ies:

nhập mô tả hình ảnh ở đây

(Bạn có thể có menu bằng cách nhấp vào màn hình "Xnest").

... Và nếu bạn cảm thấy thực sự mạo hiểm, bạn có thể bắt đầu một phiên gốc trên một bảng điều khiển ảo khác (đọc các câu trả lời khác) bằng cách truy cập một trong số chúng bằng Ctrl-Alt-F1, đăng nhập và

startx ~/test 

thường sẽ mở trên Ctrl-Alt-F8.

Lưu ý : môi trường máy tính để bàn hiện đại không được thiết kế để chạy đồng thời, cho cùng một người dùng, trong hai bảng điều khiển khác nhau. Vì vậy, không sử dụng gnome-shellhoặc unityhoặc những thứ hiện đại khi thực hiện thí nghiệm này, hoặc bạn có thể làm rối cấu hình của mình.


Chú thích:

(1) Nói về khoảng 1980-90 ở đây.

(2) Ví dụ, tôi có một máy tính xách tay với 256k RAM. Nó rất chậm trong giao diện đồ họa (B & W!), Nhưng rất linh hoạt trong bảng điều khiển. Vì vậy, tôi đã làm hầu hết công việc của tôi (chỉnh sửa C, LaTeXvà các tập tin tương tự) trong chế độ giao diện điều khiển, và chuyển sang môi trường đồ họa chỉ khi thực sự cần thiết.


4
Thanx @ Rmano, lời giải thích tuyệt vời hoàn toàn hiểu được ...
lazarus

9

startx bắt đầu xsession hoặc giao diện đồ họa nơi bạn thấy màn hình đăng nhập và mọi thứ không chỉ là bảng điều khiển ascii (phiên văn bản).

Bạn đang nhận được lỗi này vì xsession đã bắt đầu và bạn đang cố thực thi lệnh từ bên trong xsession trên tty7.

tty7 là giao diện người dùng tồn tại ở ctrl+ alt+ f7(xsession mặc định).

tty1 là giao diện người dùng tồn tại ở ctrl+ alt+ f1.

tty2 là giao diện người dùng tồn tại ở ctrl+ alt+ f2. . . và như thế.

tty1 - tty6 là các phiên văn bản và bạn có thể đăng nhập bằng tên người dùng và mật khẩu của mình trên một trong những màn hình này. Sau khi đăng nhập, bạn có thể chạy lệnh startxvà xsession sẽ bắt đầu trong tty7 nếu nó chưa chạy và tty8 nếu tty7 đã chạy xsession.


Cấp độ chạy:

run-level 0 Halt - Tắt hệ thống.

run-level 1 Chế độ một người dùng - Chế độ cho các tác vụ quản trị.

run-level 2 Đồ họa đa người dùng có kết nối mạng - Khởi động hệ thống bình thường.

run-level 3-5 Không sử dụng nhưng được cấu hình giống như runlevel 2

run-level 6 Reboot - Khởi động lại hệ thống.

Thuật ngữ runlevel dùng để chỉ một chế độ hoạt động trong một trong các hệ điều hành máy tính thực hiện khởi tạo kiểu hệ thống Unix. Thông thường, bảy đường băng tồn tại, được đánh số từ 0 đến 6; mặc dù lên đến mười, từ 0 đến 9 [cần dẫn nguồn], có thể được sử dụng. S đôi khi được sử dụng như một từ đồng nghĩa cho một trong các cấp độ. Chỉ có một "runlevel" được thực thi khi khởi động - các mức chạy không được thực hiện tuần tự, tức là runlevel 2 OR 3 OR 4 được thực thi, không phải 2 rồi 3 rồi 4. - en.wikipedia.org/wiki/Runlevel


Thanx mchid nó đã giúp tôi rất nhiều,
lazarus

nhưng khi tôi đăng nhập vào tty1 và thực hiện $ startx, tôi đã nhận được một cửa sổ máy tính để bàn mà không có bất kỳ thanh khởi động nào và các tùy chọn khác ... (trên tty8) -ctrl + Alt + F8, là startx của tôi không được cấu hình tốt hoặc nó bị giới hạn tùy chọn trên startx (giống như ở đây chỉ dành cho Máy tính để bàn)
lazarus

1
@jazzz Đó là môi trường x mặc định của bạn. Bạn rất có thể đã cài đặt nhiều môi trường máy tính để bàn. Bạn sẽ có thể tổ hợp phím CTRL + T để có được một thiết bị đầu cuối, do đó bạn có thể chạy lệnh như unityhoặc gnome-shell --replacehoặc thậm chí gnome-panelhay metacity --replace.
mchid

@jazzz Ngoài ra, nếu bạn chấp nhận câu trả lời này, vui lòng nhấp vào biểu tượng bên trái để đóng nó. cảm ơn!
mchid

xin lỗi tôi hơi trễ cho một truy vấn khác liên quan đến điều này --- là cửa sổ mới mà tôi nhận được bằng Ctrl + Alt + F8, như tôi đã nói ở trên có giống với không gian làm việc không?
lazarus

4

Nó đơn giản có nghĩa là ở một tty khác nhau .

Trích dẫn câu hỏi liên kết:

Theo mặc định, Ubuntu có 7 tty.

1-6chỉ là dòng lệnh, 7chạy phiên X của bạn (màn hình đồ họa thông thường của bạn).

Để truy cập chúng, hãy sử dụng phím tắt này: Ctrl+ Alt+F1

(thay đổi F1thành F1-F6 để truy cập thiết bị đầu cuối mà bạn cần)

Để quay lại phiên X của bạn (máy tính để bàn bình thường), hãy sử dụng: Ctrl+ Alt+F7

after logging on to a text-mode console chỉ đơn giản là đăng nhập vào một tty khác và gõ lệnh:

startx

1

Như Rmano lưu ý, startx là một cách tiếp cận rất cũ. Quay trở lại khi điều này được sử dụng, nhị phân X11 đã được cài đặt root setuid.

Tôi vừa thử điều này trong một VM và thực sự, startxthất bại như bạn mô tả, theo mặc định. chmod u+s /usr/lib/xorg/Xorgsửa lỗi đó mặc dù.

Tôi không khuyên bạn nên làm Xorgroot setuid. Thế giới đã chuyển đi từ đó vì lý do tốt. Nhưng nếu bạn đang chơi xung quanh trong một VM vứt đi, đó là cách để làm startxviệc.


1

QEMU + Buildroot ví dụ tối thiểu

Cách yêu thích của tôi để tìm hiểu những gì làm là bằng cách làm một ví dụ tối thiểu chạy nó.

Trên Ubuntu, điều này thật khó vì một giây startxcó thể xung đột với máy tính để bàn hiện tại của bạn.

https://askubfox.com/a/519164/52975 đề xuất Xnest, nhưng với QEMU + Buildroot, chúng ta có thể đi tối thiểu hơn nữa và tạo một bản phân phối vi mô chỉ với X11 được cài đặt.

Bằng cách này sẽ dễ hiểu hơn những gì đang diễn ra.

Tôi đã mô tả việc tạo distro tại: /unix//a/306116/32558

Khi bạn đã có hình ảnh chạy trên QEMU, bạn bắt đầu trên trình bao TTY.

Sau đó, khi bạn làm:

root
startx

nó khởi động GUI X11:

nhập mô tả hình ảnh ở đây

Bây giờ hãy xem nguồn cho startxbên trong bản phân phối đó, đó chỉ là một tập lệnh shell.

Nó là một trình bao bọc đơn giản /usr/bin/xinitvà nó được chuyển /etc/X11/xinit/xinitrcđến xinit.

Nếu bạn mở /etc/X11/xinit/xinitrc, nó chứa các dòng sau:

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

vì vậy chúng tôi thấy rằng nó khởi động:

  • twm: một trình quản lý cửa sổ rất đơn giản và cũ
  • xclockxtermnhững gì chúng ta thấy trên màn hình

Đối với /usr/bin/xinit, chúng ta có thể làm:

man xinit

trong đó nói rằng:

Nếu không có chương trình máy khách cụ thể nào được đưa ra trên dòng lệnh, xinit sẽ tìm tệp trong thư mục chính của người dùng có tên .xinitrc để chạy dưới dạng tập lệnh shell để khởi động chương trình máy khách. Nếu không có tệp nào như vậy tồn tại, xinit sẽ sử dụng như sau:

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

Nếu không có chương trình máy chủ cụ thể nào được đưa ra trên dòng lệnh, xinit sẽ tìm tệp trong thư mục chính của người dùng có tên .xserverrc để chạy dưới dạng tập lệnh shell để khởi động máy chủ. Nếu không có tệp nào như vậy tồn tại, xinit sẽ sử dụng như sau:

X  :0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.