Skip to main content

Κείμενο-τερματικά στο Linux - 14.1 Getty (χρησιμοποιείται στο / etc / inittab)

Linux For Beginners 2: File Management In Detail (Ενδέχεται 2024)

Linux For Beginners 2: File Management In Detail (Ενδέχεται 2024)
Anonim

14.1 Getty (χρησιμοποιείται στο / etc / inittab)

Εισαγωγή στη Getty

Προκειμένου να εκτελεστεί μια διαδικασία σύνδεσης σε μια σειριακή θύρα (και το τερματικό που είναι συνδεδεμένο με αυτήν) όταν ο υπολογιστής ξεκινήσει (ή αλλάζει επίπεδα εκτέλεσης), μια εντολή getty πρέπει να τεθεί στο αρχείο / etc / inittab. Η εκτέλεση του getty από τη γραμμή εντολών μπορεί να προκαλέσει προβλήματα (δείτε Εάν το getty τρέχει από τη γραμμή εντολών: Τα προγράμματα σταματούν για να δουν τους λόγους). Getty παίρνει ένα TTY (ένα τερματικό) πηγαίνει. Κάθε τερματικό χρειάζεται τη δική του εντολή getty. Υπάρχει επίσης τουλάχιστον μία εντολή getty για την κονσόλα σε κάθε αρχείο / etc / inittab. Βρείτε αυτό και βάλτε τις εντολές getty για τα πραγματικά τερματικά δίπλα του. Αυτό το αρχείο μπορεί να περιέχει δείγματα γραμμών getty για τερματικά κειμένου που σχολιάζονται, έτσι ώστε το μόνο που χρειάζεται να κάνετε είναι να τα αποσυνδέσετε (να καταργήσετε τις κορυφαίες #) και να αλλάξετε μερικά επιχειρήματα.

Τα επιχειρήματα που επιτρέπονται εξαρτώνται από το γκάζι που χρησιμοποιείτε:Δύο gettys καλύτερα για άμεσα συνδεδεμένους τερματικούς σταθμούς είναι:

  • agetty (μερικές φορές μόλις αποκαλείται getty): Πολύ εύκολο στη ρύθμιση. Δεν υπάρχουν αρχεία ρυθμίσεων. Βλέπε agetty
  • getty (μέρος του getty_ps)

Δύο gettys καλύτερα για dial-in μόντεμ (αποφύγετε για άμεσα συνδεδεμένους τερματικούς σταθμούς) είναι:

  • mgetty: το καλύτερο για μόντεμ. τα έργα για τους τερματικούς σταθμούς είναι πολύ κατώτερα
  • uugetty: Μόνο για μόντεμ. μέρος του πακέτου getty_ps

Απλά gettys να χρησιμοποιήσετε εάν δεν χρησιμοποιείτε ένα πραγματικό τερματικό κειμένου. Οι περισσότεροι χρήστες Linux χρησιμοποιούν ένα από αυτά στην οθόνη τους:

  • mingetty
  • fbgetty
  • fgetty
  • rungetty

Η διανομή του Linux μπορεί να έρθει είτε με ps_getty είτε με agetty για τερματικά κειμένου. Ορισμένες διανομές δεν παρέχουν ούτε. Δυστυχώς, συχνά το αποκαλούν "getty", οπότε μπορεί να χρειαστεί να καθορίσετε ποια έχετε από τα επιχειρήματα που βάζετε μετά από αυτό στο / etc / inittab. Το Debian χρησιμοποιεί agetty (στο πακέτο util-linux). Τα RedHat και Fedora χρησιμοποίησαν το ps_getty το οποίο βρίσκεται στο: ps_getty

Ως έσχατη λύση για να προσπαθήσετε να προσδιορίσετε ποιο getty έχετε, μπορείτε να ελέγξετε τον εκτελέσιμο κώδικα του (συνήθως στο / sbin). Το ps_getty έχει / etc / gettydefs ενσωματωμένο σε αυτόν τον κώδικα. Για να το αναζητήσετε, μεταβείτε στο / sbin και πληκτρολογήστε:χορδές grep getty Εάν το getty είναι στην πραγματικότητα το agetty τα παραπάνω δεν θα έχουν αποτέλεσμα τίποτα. Ωστόσο, αν έχετε πληκτρολογήσει agetty:getty -hθα πρέπει να εμφανίζονται οι επιλογές -hLmw.

Αν δεν έχετε το getty που θέλετε να ελέγξετε άλλες διανομές και το εξωγήινο πρόγραμμα μετατροπής μεταξύ πακέτων RPM και Debian. Ο πηγαίος κώδικας μπορεί να μεταφορτωθεί από το λογισμικό Getty.

Εάν δεν χρησιμοποιείτε γραμμές ελέγχου μόντεμ (για παράδειγμα αν χρησιμοποιείτε μόνο τον ελάχιστο αριθμό 3 αγωγών: εκπομπή, λήψη και κοινή σήμανση εδάφους), θα πρέπει να ενημερώσετε το getty γνωρίζοντας αυτό χρησιμοποιώντας μια "τοπική" σημαία. Η μορφή αυτού εξαρτάται από το γκάζι που χρησιμοποιείτε.

Getty εξόδους μετά τη σύνδεση (και μπορεί να respawn)

Αφού συνδεθείτε, θα παρατηρήσετε (χρησιμοποιώντας το "top", "ps -ax" ή "ptree") ότι η διαδικασία Getty δεν λειτουργεί πλέον. Τι έπαθε? Γιατί επανεκκινείται πάλι το getty αν σκοτωθεί το κέλυφος σας; Εδώ γιατί.

Αφού πληκτρολογήσετε το όνομα χρήστη σας, το getty παίρνει και καλεί το πρόγραμμα σύνδεσης που το λέει το όνομα χρήστη σας. Η διαδικασία getty αντικαθίσταται από τη διαδικασία σύνδεσης. Η διαδικασία σύνδεσης ζητάει τον κωδικό πρόσβασής σας, ελέγχει και ξεκινά οποιαδήποτε διαδικασία καθορίζεται στο αρχείο κωδικού πρόσβασης. Αυτή η διαδικασία είναι συχνά το κέλυφος bash. Αν ναι, το bash ξεκινά και αντικαθιστά τη διαδικασία σύνδεσης. Σημειώστε ότι μια διαδικασία αντικαθιστά άλλη και ότι η διαδικασία του shell shell αρχικά ξεκίνησε ως διαδικασία getty. Οι συνέπειες αυτού θα εξηγηθούν παρακάτω.

Τώρα στο αρχείο / etc / inittab, το getty υποτίθεται ότι respawn (επανεκκίνηση) αν σκοτωθεί. Λέει έτσι στη γραμμή που καλεί getty. Αλλά αν το κοχύλι bash (ή η διαδικασία σύνδεσης) σκοτωθεί, getty respawns (επανεκκίνηση). Γιατί; Λοιπόν, και η διαδικασία σύνδεσης και bash είναι αντικαταστάσεις για getty και να κληρονομήσει

* Κείμενο τερματισμού κειμένου

οι συνδέσεις σήματος καθορίζονται από τους προκατόχους τους. Στην πραγματικότητα, αν παρατηρήσετε τις λεπτομέρειες, θα διαπιστώσετε ότι η διαδικασία αντικατάστασης θα έχει το ίδιο αναγνωριστικό διαδικασίας με την αρχική διαδικασία. Έτσι bash είναι είδος getty σε μεταμφίεση με τον ίδιο αριθμό διαδικασίας ID. Αν σκοτωθεί bash είναι ακριβώς όπως σκοτώθηκε γκασίτι (αν και το getty δεν τρέχει πια). Αυτό έχει ως αποτέλεσμα την επανάληψη του γκέτα.

Όταν κάποιος αποσυνδεθεί, όλες οι διαδικασίες σε αυτή τη σειριακή θύρα σκοτώνονται συμπεριλαμβανομένου του κελύφους bash. Αυτό μπορεί επίσης να συμβεί (εάν είναι ενεργοποιημένο) εάν αποστέλλεται ένα σήμα hangup στην σειριακή θύρα από μια σταγόνα τάσης DCD από το μόντεμ. Είτε η αποσύνδεση είτε η απόρριψη του DCD θα έχει ως αποτέλεσμα το getty respawning. Κάποιος μπορεί να αναγκάσει το getty να respawn χειροκίνητα σκοτώνοντας bash (ή login) είτε πατώντας το πλήκτρο k, κλπ. Ενώ στο "top" ή με την εντολή "kill". Θα χρειαστεί να το σκοτώσετε με το σήμα 9 (το οποίο δεν μπορεί να αγνοηθεί).

Εάν run getty από τη γραμμή εντολών: Τα προγράμματα σταματούν

Θα πρέπει κανονικά να τρέχετε γκέτα από μέσα / etc / inittab και όχι από τη γραμμή εντολών ή αλλιώς κάποια προγράμματα που εκτελούνται στο τερματικό ενδέχεται να ανασταλούν απροσδόκητα (σταματημένα). Εδώ γιατί (παραλείψτε στην επόμενη ενότητα αν ο λόγος δεν είναι σημαντικός για εσάς). Αν ξεκινήσετε getty για το say ttyS1 από τη γραμμή εντολών ενός άλλου τερματικού, πείτε tty1, τότε θα έχει tty1 ως "τερματικό ελέγχου" του, παρόλο που το πραγματικό τερματικό που τρέχει είναι ttyS1. Έτσι έχει λάθος τερματικό ελέγχου. Αλλά αν ξεκινήσει μέσα στο αρχείο inittab τότε θα έχει ttyS1 ως τερματικό ελέγχου (σωστό).

Παρόλο που το τερματικό ελέγχου είναι λάθος, η σύνδεση στο ttyS1 λειτουργεί καλά (αφού δώσατε ttyS1 ως επιχείρημα για το getty). Η τυπική είσοδος και έξοδος ρυθμίζονται στο ttyS1 ακόμα κι αν το τερματικό ελέγχου παραμένει tty11. Άλλα προγράμματα που εκτελούνται στο ttyS1 μπορεί να κληρονομήσουν αυτή την τυπική είσοδο / έξοδο (η οποία είναι συνδεδεμένη με το ttyS1) και όλα είναι εντάξει. Αλλά ορισμένα προγράμματα μπορεί να κάνουν το λάθος να προσπαθούν να διαβάσουν από το τερματικό ελέγχου τους (tty1) που είναι λάθος. Τώρα το tty1 μπορεί να σκεφτεί ότι τα προγράμματα αυτά εκτελούνται στο παρασκήνιο από το tty1, οπότε μια προσπάθεια να διαβάσει από tty1 (θα έπρεπε να ήταν ttyS1) οδηγεί σε διακοπή της διαδικασίας που προσπάθησε να διαβάσει. (Δεν επιτρέπεται η ανάγνωση μιας διαδικασίας φόντου από το τερματικό ελέγχου.). Ενδέχεται να δείτε κάποιο μήνυμα όπως: "1 + Σταμάτησε"στην οθόνη.Σε αυτό το σημείο είστε κολλημένοι επειδή δεν μπορείτε να αλληλεπιδράσετε με μια διαδικασία η οποία προσπαθεί να επικοινωνήσει μαζί σας μέσω λάθος τερματικού.Φυσικά για να ξεφύγετε από αυτό μπορείτε να πάτε σε άλλο τερματικό σταθμό και να σκοτώσετε τη διαδικασία, κ.λπ. .

agetty (μπορεί να ονομάζεται getty)

Παράδειγμα γραμμής στο / etc / inittab:

S1: 23: αναπνοή: / sbin / getty -L 19200 ttyS1 vt102

Το S1 προέρχεται από το ttyS1. Το 23 σημαίνει ότι το getty τρέχει κατά την είσοδο στα επίπεδα εκτέλεσης 2 ή 3. respawn σημαίνει ότι εάν γκέι (ή μια διαδικασία που το αντικαθιστά όπως bash) σκοτωθεί, το getty ξεκινά αυτόματα (respawn) ξανά. / sbin / getty είναι η εντολή getty. Το -L σημαίνει Τοπικό (αγνοεί τα σήματα ελέγχου μόντεμ). -h (δεν φαίνεται στο παράδειγμα) επιτρέπει τον έλεγχο ροής υλικού (ίδιο με το stty crtscts). 19200 είναι η ταχύτητα μετάδοσης. ttyS1 σημαίνει / dev / ttyS1 (COM2 στο MS-DOS). vt102 είναι ο τύπος τερματικού και αυτό το getty θα ορίσει τη μεταβλητή περιβάλλοντος TERM σε αυτήν την τιμή. Δεν υπάρχουν αρχεία ρυθμίσεων. Πληκτρολογήστε "init q" στη γραμμή εντολών μετά την επεξεργασία του getty και θα πρέπει να δείτε μια γραμμή εντολών σύνδεσης.

Η αυτόματη ανίχνευση των προβλημάτων ισοτιμίας της Agetty

ο agetty το πρόγραμμα θα επιχειρήσει να ανιχνεύσει αυτόματα το πακέτο ισοτιμίας μέσα στο τερματικό (χωρίς καμία ισοτιμία). Δεν υποστηρίζει δυφιολέξεις δεδομένων 8 bit, συν 1-bit ισοτιμία. Δείτε τα bytes δεδομένων 8-bit (συν ισοτιμία). Εάν χρησιμοποιείτε stty να ορίσετε ισοτιμία, agetty θα την απενεργοποιήσει αυτόματα αφού αρχικά θέλει το bit ισοτιμίας να έρθει ως να ήταν ένα bit δεδομένων. Αυτό οφείλεται στο γεγονός ότι χρειάζεται να πάρετε το τελευταίο κομμάτι (πιθανώς ένα bit ισοτιμίας) καθώς πληκτρολογείτε το όνομα σύνδεσης, έτσι ώστε να μπορεί να ανιχνεύει αυτόματα την ισοτιμία. Έτσι, εάν χρησιμοποιείτε την ισοτιμία, ενεργοποιήστε την μόνο μέσα στο τερματικό κειμένου και αφήστε το agetty ανιχνεύει αυτόματα και το θέτει στον υπολογιστή. Αν το τερματικό σας υποστηρίζει την παραληφθείσα ισοτιμία, η γραμμή εντολών θα φαίνεται αλλοιωμένη μέχρι να πληκτρολογήσετε κάτι ώστε το getty να εντοπίσει το

ισοτιμία. Η αλλοιωμένη προτροπή θα αποτρέψει τους επισκέπτες, κλπ. Από την προσπάθεια σύνδεσης. Αυτό θα μπορούσε να είναι ακριβώς αυτό που θέλετε.

Υπάρχει μερικές φορές ένα πρόβλημα με την αυτόματη ανίχνευση της ισοτιμίας. Αυτό συμβαίνει επειδή αφού πληκτρολογήσετε πρώτα το όνομα σύνδεσης σας, agetty ξεκινά το Σύνδεση να τελειώσει η καταγραφή σας. Δυστυχώς, το Σύνδεση το πρόγραμμα δεν μπορεί να ανιχνεύσει την ισοτιμία έτσι αν το getty το πρόγραμμα απέτυχε να καθορίσει την ισοτιμία στη συνέχεια Σύνδεση δεν θα είναι σε θέση να το προσδιορίσει. Εάν αποτύχει η πρώτη προσπάθεια σύνδεσης, Σύνδεση θα σας επιτρέψει να προσπαθήσετε ξανά, κλπ. (όλα με λάθος ρύθμιση της ισοτιμίας). Τελικά, μετά από μια σειρά αποτυχημένων προσπαθειών σύνδεσης (ή μετά από ένα χρονικό όριο) agetty θα ξεκινήσει εκ νέου και θα ξεκινήσει ξανά τις ακολουθίες σύνδεσης. Μόλις το getty εκτελείται ξανά, μπορεί να είναι σε θέση να ανιχνεύσει την ισοτιμία στη δεύτερη δοκιμή, ώστε όλα να λειτουργήσουν εντάξει.

Με λανθασμένη ισοτιμία, το Σύνδεση το πρόγραμμα δεν μπορεί να διαβάσει σωστά αυτό που πληκτρολογείτε και δεν μπορείτε να συνδεθείτε. Εάν το τερματικό σας υποστηρίζει την παραληφθείσα ισοτιμία, θα συνεχίσετε να βλέπετε μια αλλοιωμένη οθόνη. Εάν το getty αποτύχει να ανιχνεύσει την ισοτιμία, ένα αρχείο / etc / issue συνήθως απορρίπτεται στην οθόνη λίγο πριν από την προειδοποίηση, έτσι ώστε στην οθόνη να εμφανίζονται περισσότερες αλλοιωμένες λέξεις.

Γιατί δεν είναι δυνατή η ανίχνευση της ισοτιμίας από το πρώτο γράμμα που πληκτρολογήσατε; Ακολουθεί ένα παράδειγμα: Ας υποθέσουμε ότι ανιχνεύει ένα byte 8-bit με το δυαδικό ψηφίο του 0 (bit υψηλής τάξης) και με έναν περίεργο αριθμό 1-bit. Ποια ισοτιμία είναι; Λοιπόν, ο περίεργος αριθμός των 1 bits υποδηλώνει ότι είναι περίεργη ισοτιμία. Αλλά θα μπορούσε επίσης να είναι μόνο ένας χαρακτήρας 8-bit χωρίς ισοτιμία. Δεν υπάρχει τρόπος να προσδιορίσουμε ποια. Αλλά μέχρι στιγμής έχουμε εξαλείψει την πιθανότητα ίσης ισοτιμίας. Επομένως, η ανίχνευση της ισοτιμίας προχωρά με μια διαδικασία εξάλειψης.

Εάν το επόμενο δακτυλογραφημένο byte είναι παρόμοιο με το πρώτο και επίσης εξαλείφει μόνο τη δυνατότητα ίσης ισοτιμίας, εξακολουθεί να είναι αδύνατον να προσδιοριστεί η ισοτιμία. Αυτή η κατάσταση μπορεί να συνεχιστεί επ 'αόριστον και σε σπάνιες περιπτώσεις η σύνδεση θα αποτύχει μέχρι να αλλάξετε το όνομα σύνδεσης. Αν η agetty βρίσκει ένα κομμάτι ισοτιμίας 1, θα υποθέσει ότι αυτό είναι ένα bit ισοτιμίας και όχι ένα κομμάτι υψηλής τάξης ενός χαρακτήρα 8-bit. Υποθέτει συνεπώς ότι δεν χρησιμοποιείτε μετα-χαρακτήρες (υψηλό σύνολο δυαδικών ψηφίων) στο όνομα χρήστη (δηλαδή το όνομά σας βρίσκεται στο ASCII).

Κάποιος μπορεί να εισέλθει σε έναν "βρόχο σύνδεσης" με διάφορους τρόπους. Ας υποθέσουμε ότι πληκτρολογείτε μόνο ένα ή δύο γράμματα για το όνομα σύνδεσης και στη συνέχεια πατήστε επιστροφή. Εάν αυτά τα γράμματα δεν επαρκούν για την ανίχνευση ισοτιμίας, τότε η σύνδεση αρχίζει πριν εντοπισθεί η ισοτιμία. Μερικές φορές το πρόβλημα αυτό συμβαίνει εάν δεν έχετε το τερματικό ενεργοποιημένο και / ή συνδεδεμένο όταν ξεκινά για πρώτη φορά το agetty.

Εάν κολλήσετε σε αυτόν τον "βρόχο σύνδεσης", μια διέξοδος από αυτό είναι να πατήσετε το πλήκτρο επιστροφής αρκετές φορές μέχρι να εμφανιστεί το prompt getty login. Ένας άλλος τρόπος είναι να περιμένετε λίγο χρόνο περίπου για ένα χρονικό όριο. Στη συνέχεια, η εντολή getty σύνδεσης θα τεθεί στην οθόνη από το πρόγραμμα getty και ίσως προσπαθήσετε ξανά να συνδεθείτε.

Δεδομένα ψηφιολέξεων 8-bit (συν ισοτιμία)

Δυστυχώς, η agetty δεν μπορεί να ανιχνεύσει αυτή την ισοτιμία.Από τα τέλη του 1999 δεν έχει την επιλογή να απενεργοποιήσει την αυτόματη ανίχνευση ισοτιμίας και έτσι θα εντοπίσει εσφαλμένη ισοτιμία. Το αποτέλεσμα είναι ότι η διαδικασία σύνδεσης θα είναι αλλοιωμένη και η ισοτιμία θα είναι σωστή. Επομένως, δεν φαίνεται εφικτό να προσπαθήσουμε να χρησιμοποιήσουμε ψηφιολέξεις δεδομένων 8-bit με ισοτιμία.

getty (μέρος του getty_ps)

(Τα περισσότερα από αυτά προέρχονται από το παλιό Serial-HOWTO από τον Greg Hankins)Για αυτό το getty πρέπει να τοποθετήσετε καταχωρήσεις σε ένα αρχείο διαμόρφωσης και να προσθέσετε μια καταχώρηση στο / etc / inittab. Ακολουθούν μερικές παραδείγματα καταχωρήσεων που θα χρησιμοποιηθούν για το τερματικό που βάλατε στο αρχείο ρυθμίσεων / etc / gettydefs.

Σημειώστε ότι τα DT38400, DT19200, κλπ. Είναι απλά ετικέτες και πρέπει να είναι τα ίδια με αυτά που χρησιμοποιείτε / etc / inittab.

Αν θέλετε, μπορείτε να κάνετε getty εκτυπώστε ενδιαφέροντα πράγματα στο banner σύνδεσης. Στα παραδείγματα μου, έχω εκτυπώσει το όνομα του συστήματος και τη σειριακή γραμμή. Μπορείτε να προσθέσετε και άλλα πράγματα: blockquote

σκιά = ναι

Όταν ολοκληρώσετε την επεξεργασία / etc / gettydefs, μπορείτε να επαληθεύσετε ότι η σύνταξη είναι σωστή κάνοντας:

Βεβαιωθείτε ότι δεν υπάρχει άλλη getty ή uugetty config για τη σειριακή θύρα στην οποία είναι συνδεδεμένο το τερματικό σας όπως (/etc/default/{uu}getty.ttySΝ ή /etc/conf.{uu}getty.ttySΝ), καθώς αυτό πιθανώς θα επηρεάσει τη λειτουργία getty σε ένα τερματικό. Καταργήστε τέτοια αρχεία που βρίσκονται σε διένεξη αν εξέρχονται.

Επεξεργαστείτε το / etc / inittab αρχείο για εκτέλεση getty στη σειριακή θύρα (αντικαθιστώντας τις σωστές πληροφορίες για το περιβάλλον σας - θύρα, ταχύτητα και προεπιλεγμένο τύπο τερματικού):

Σε αυτό το σημείο, θα πρέπει να δείτε μια γραμμή σύνδεσης στο τερματικό σας. Μπορεί να χρειαστεί να επιστρέψετε για να πάρετε την προσοχή του τερματικού σταθμού.

mgetty

Το "m" σημαίνει μόντεμ. Αυτό το πρόγραμμα απευθύνεται κυρίως σε μόντεμ και από τα μέσα του 2000 θα χρειαστεί επανάληψη για να το χρησιμοποιήσετε για τερματικά κειμένου (εκτός αν χρησιμοποιείτε έλεγχο ροής υλικού - και αυτό συνήθως απαιτεί ένα χειροποίητο καλώδιο). Για την τεκμηρίωση των άμεσα συνδεδεμένων τερματικών, ανατρέξτε στην ενότητα "Άμεση" του εγχειριδίου: mgetty.texi.

Κοιτάξτε τις τελευταίες γραμμές του /etc/mgetty/mgetty.config για ένα παράδειγμα ρύθμισης για ένα τερματικό. Εκτός αν λέτε "toggle-dtr no", θα σκεφτεί ότι έχετε ένα μόντεμ και πτώση (αρνηθείτε) τον ακροδέκτη DTR στον υπολογιστή σε μια μάταιη προσπάθεια επαναφοράς του ανύπαρκτου μόντεμ. Σε αντίθεση με άλλα gettys, το mgetty δεν θα προσκολληθεί σε ένα τερματικό μέχρι κάποιος να χτυπήσει κάποιο κλειδί του τερματικού έτσι θα δείτε ένα a? για το τερματικό στο μπλουζα ή ps μέχρι να συμβεί αυτό. Τα αρχεία καταγραφής μέσα / var / log / mgetty / μπορεί να εμφανίσει μερικά προειδοποιητικά μηνύματα που ισχύουν μόνο για μόντεμ που μπορείτε να αγνοήσετε.

Ακολουθεί ένα παράδειγμα της απλής γραμμής που βάλατε / etc / inittab: