Làm cách nào để bắt đầu trình bao thứ hai khi ở chế độ người dùng?


14

Điều này nghe có vẻ mâu thuẫn về mặt thuật ngữ, nhưng gần đây tôi cần sử dụng chế độ một người dùng (còn gọi là chế độ bảo trì) trong một thời gian (ngày!) Trong khi thử xây dựng lại một mảng RAID bị hỏng.

Khi thực hiện điều này, tôi thấy mình muốn sử dụng trình bao thứ hai cho những việc như kiểm tra / chỉnh sửa cài đặt trong các tệp cấu hình khác nhau hoặc xem nhật ký hệ thống trong khi bảng điều khiển chính (và duy nhất) được gắn kết thực hiện một số quy trình khôi phục.

Điều gì sẽ là lệnh được đề xuất để khởi chạy shell thứ hai trên một tty khác?

Rõ ràng, một phương pháp có thể được sử dụng screentrong tty1, nhưng điều này không hoàn toàn dễ dàng khi chỉ chuyển đổi phiên với Alt-F1, Alt-F2, v.v.


4
screenchỉ là dễ dàng như vậy. Ctrl AP dường như không phức tạp hơn Alt F1 ...
mveroone 17/03/2016

Đáng lưu ý rằng các ứng dụng thích screentmuxquản lý cửa sổ TUI không phải lúc nào cũng thực hiện được. Đôi khi bạn cần một ttyXthiết bị thực tế , chứ không phải là một pts.
Bắn Parthian

Câu trả lời:


14

Có một lệnh được thiết kế đặc biệt cho tình huống này : openvt. Chỉ cần chạy openvttừ shell của bạn trên tty1 và bạn sẽ thấy một shell chạy trên tty đầu tiên chưa có thứ gì trên đó (có lẽ là tty2.) Có một số tùy chọn bạn có thể thấy hữu ích; xem trang người đàn ông openvt.

Vì đây không phải là thông tin đăng nhập được quản lý bởi getty, khi bạn thoát khỏi trình bao mới, bạn sẽ không thấy dấu nhắc đăng nhập xuất hiện. Tty sẽ chết vì sẽ không có quá trình nào chạy trên nó, nhưng bạn vẫn có thể chuyển đổi qua lại (Alt-F1 Alt-F2) và xem những gì trên màn hình khi bạn thoát khỏi vỏ. Các deallocvtttys lệnh huỷ hoại mà trong này zombie giống như nhà nước, trở về với bản gốc "Alt-F2 không làm gì" nhà nước.

Ban đầu những lệnh này được gọi opendisalloc, nhưng cuối cùng ai đó đã quyết định thay đổi chúng vì chúng quá chung chung và không tuân thủ được đánh giá là "không phải là một từ".

Vào thời xưa, thông thường trình điều khiển bàn phím và init được cấu hình để Alt + Up chạy open, do đó, nó sẽ hoạt động như một phím nóng để tạo ra một vỏ trên bảng điều khiển mới. Bạn vẫn có thể tìm thấy phần còn lại của cấu hình cũ đó, nhận xét, trong của bạn /etc/inittab. (Nếu bạn không sử dụng một số init mới lạ mắt mà không có inittab.)

Có một câu hỏi tương tự ở đây


3
Đẹp, tôi đã không nhận ra openvt. +1.
jscott

Điều này thực sự có vẻ dễ dàng hơn nhiều mà getty. Tôi không bao giờ nhận ra nó đã được cài đặt.
StarNamer

Chỉ cần nghĩ rằng tôi đã báo cáo rằng tôi đã dành hơn một tuần với một hệ thống ở chế độ người dùng duy nhất để sửa chữa một mảng RAID và openvttỏ ra rất hữu ích. Cảm ơn đã mang một lệnh mới đến thông báo của tôi.
StarNamer

12

Bạn có thể sinh ra một cái khác gettycho bất cứ điều gì bạn muốn. Khởi động vào chế độ người dùng, sau đó khởi động a gettytrên tty2:

root@host:~# /sbin/getty 38400 tty2 &

Bây giờ bạn có thể Alt+ F2qua tty mới. Lặp lại cho ttys bổ sung khi cần thiết. Bạn có thể có thể làm một cái gì đó sạch hơn và chỉ cần cấu hình /etc/inittabđể tự động xử lý việc này trong chế độ người dùng.


Điều này trông giống như những gì tôi đang tìm kiếm. Lần sau tôi sẽ thử.
StarNamer

Thử nó. Nó hoạt động, nhưng vì phiên đăng nhập không được sinh ra init, nên nó sẽ không được sinh ra nếu nó chết.
StarNamer

Thật vậy, chúng ta chỉ cần thả nó vào nền trong ví dụ trên. Nếu bạn yêu cầu cung cấp đầy đủ một vt thực sự, ít nhất bạn sẽ bị hack /etc/inittab/etc/rc1.d/S??singleít nhất là.
jscott

2

Bạn có thể có thể làm mà không cần một ví dụ shell bổ sung bằng cách sử dụng JOB CONTROLtrong shell hiện tại của bạn. Nó được ghi lại trong trang của bash(1).

Bạn chỉ có thể tạm dừng một tác vụ bằng cách sử dụng chuỗi Ctrl+ Ztheo mặc định, mặc dù nó có thể được cấu hình trong thiết bị đầu cuối của bạn theo một cách khác, kiểm tra đầu ra của stty -a:

$ stty -a | grep susp
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

Bạn có thể kiểm tra công việc của mình bằng cách phát hành jobs:

# jobs
[1]   Stopped                 journalctl -f
[2]-  Stopped                 vim /etc/hosts
[3]+  Stopped                 tail -f /var/log/firewalld

Đưa một trong số chúng lên tiền cảnh:

$ fg %3

Hoặc tiếp tục nó trong nền:

$ bg %2

Phương pháp này không có nhiều ưu điểm của screenhoặc tmux, nhưng có thể hữu ích như nhau trong một số tình huống.


Vấn đề là tôi không muốn đình chỉ hoặc can thiệp vào quá trình đang chạy trên bảng điều khiển ban đầu. Ví dụ: khi chạy, ddrescuetôi không muốn bị gián đoạn và tiếp tục lại mặc dù nó đã được thiết lập để làm điều này ..
StarNamer

Một vài vấn đề với điều này. Thứ nhất, anh có thể không được sử dụng bash như vỏ của mình (có thể được sử dụng csh, tcshhoặc zsh, ví dụ), do đó đề cập manpage của nó sẽ là không chính xác trong trường hợp đó. Đối với người khác, điều này không trả lời câu hỏi như đã hỏi.
Bắn Parthian

1

Cân nhắc sử dụng bộ ghép kênh đầu cuối như tmux hoặc màn hình.

Tìm hiểu thêm về tmux tại đây: https://github.com/tmux/tmux/wiki


Câu hỏi đã đề cập đến vấn đề này: "Rõ ràng, một phương pháp có thể là sử dụng màn hình trong tty1 *, nhưng điều này không hoàn toàn dễ dàng khi chỉ chuyển đổi phiên với Alt-F1, Alt-F2, v.v.".
Cristian Ciupitu

Như Cristian nói, tôi đã xem xét screenvà cảm thấy các bộ ghép kênh khác thậm chí còn quá mức cần thiết. Tất cả tôi cần là một giao diện điều khiển thứ hai đơn giản.
StarNamer

Ah, xin lỗi, tôi bỏ qua screentrong câu hỏi của bạn. Muộn rồi.
Marcin Kaminski

Làm thế nào để sử dụng kết hợp 2 phím là "quá mức" bên cạnh việc sinh ra các TTY mới và neo vào chúng một cách riêng biệt và như vậy?
mveroone 17/03 '

IMO, đó là một định nghĩa kỳ lạ về 'quá mức cần thiết' nhưng này, bất cứ điều gì có hiệu quả với ai đó, tôi đều ổn với điều đó;)
Marcin Kaminski
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.