Showing posts with label Console. Show all posts
Showing posts with label Console. Show all posts

Friday, October 21, 2011

Ελληνικά στην Κονσόλα του FreeBSD 9.X

Αν δεν το καταλάβατε από το προηγούμενο post μας, θα το καταλάβετε μόλις δοκιμάσετε μια εγκατάσταση του FreeBSD 9 (RC1 αυτή τη στιγμή). Το νέο bsdinstall παραλείπει κάποια βήματα ρυθμίσεων που υπήρχαν στο sysinstall. Μια "παρενέργεια" που δημιουργείται είναι να μην μπορούμε να γράψουμε Ελληνικά στην κονσόλα μας. Να θιυμίσουμε εδώ ότι για να γράψετε Ελληνικά στην κονσόλα θα πρέπει να ρυθμίσετε την κωδικοποίηση σε ISO8859-7. Αν σκοπεύετε να χρησιμοποιήσετε το σύστημα σας μόνο μέσα από X (ή έστω μέσω ssh από xterm) δεν χρειάζεστε τίποτα από τα παρακάτω και είναι καλύτερα να ρυθμίσετε την κωδικοποίηση σε UTF-8.

Αρχικές Ρυθμίσεις


Αν κατά τη διάρκεια της εγκατάστασης επιλέξατε το Ελληνικό πληκτρολόγιο των 101 πλήκτρων, θα έχετε την παρακάτω γραμμή στο /etc/rc.conf:

keymap="gr.us101.acc"

Καθώς καταλαβαίνετε το παραπάνω από μόνο του δεν επαρκεί για να έχετε Ελληνικά. Χρειάζεστε ακόμα τα παρακάτω:
  • Fonts που να μπορούν να δείξουν Ελληνικά στην κονσόλα. Το sysinstall είχε την αντίστοιχη ερώτηση, το bsdinstall όχι.
  • Terminal type στο /etc/ttys κατάλληλο για Ελληνικά. Είναι το cons25l7. Προσέξτε, είναι το Αγγλικό γράμμα "l" και όχι ο αριθμός "1". Και εδώ, το sysinstall είχε την αντίστοιχη ερώτηση και έκανε τη ρύθμιση, το bsdinstall όχι.
  • Να θέσετε τη μεταβλητή περιβάλλοντος LANG σε el_GR.ISO8859-7. Αυτή είναι μια ρύθμιση που πρέπει να κάνετε στα αρχεία ρυθμίσεων του κελύφους σας. Το σημείο αυτό δεν αλλάζει από πριν.

Ρυθμίσεις Fonts


Το sysinstall υπάρχει ακόμα στο βασικό σύστημα! Αν θέλετε μπορείτε να το εκτελέσετε ως root και να επιλέξετε configure - console - font και ISO8859-7. Αλλά δεν χρειάζεται να το κάνετε στα αλήθεια. Απλά προσθέστε τις παρακάτω γραμμές στο /etc/rc.conf:

font8x8="iso07-8x8"
font8x14="iso07-8x14"
font8x16="iso07-8x16"


Terminal Type


Ίσως σκεφτείτε να εκτελέσετε το sysinstall και να επιλέξετε το terminal type. Μην το κάνετε, γιατί αν και το sysinstall δεν θα διαμαρτυρηθεί, δεν πρόκειται να αλλάξει το /etc/ttys. Θα πρέπει να το επεξεργαστείτε χειροκίνητα και να αλλάξετε το xterm με cons25l7. Θα πρέπει να κάνετε την αλλαγή στο ttyv0 και σε οποιαδήποτε άλλο virtual terminal θέλετε. Παρακάτω βλέπετε ένα παράδειγμα για ttyv0:

ttyv0 "/usr/libexec/getty Pc" cons25l7 on secure


Ρύθμιση Environment Variable


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

export LANG=el_GR.ISO8859-7

για κελύφη όπως το bash ή

setenv LANG el_GR.ISO8859-7

για κελύφη όπως το csh. Η γραμμή θα πρέπει να μπει στο κατάλληλο αρχείο ρυθμίσεων του κελύφους σας (π.χ. το .profile).

Έλεγχος Λειτουργίας


Αφού κάνετε τα παραπάνω, μπορείτε να δοκιμάσετε τα Ελληνικά στην κονσόλα. Είτε επανεκκνίνηστε το μηχάνημα σας, είτε την υπηρεσία syscons:

# service syscons restart

Μη ξεχάσετε να κάνετε logout-login (η ενδεχομένως source το .profile) για να ενεργοποιηθεί η μεταβλητή περιβάλλοντος. Τα Ελληνικά στην κονσόλα αλλάζουν με ALT+SPACE. Καλή τύχη!

Saturday, October 23, 2010

Σειριακό Τερματικό και Σειριακή Κονσόλα στο FreeBSD


Ίσως με πείτε και αναχρονιστικό, αλλά είχα πολλά χρόνια να ασχοληθώ με σειριακές επικοινωνίες! Θα μου πείτε ποιος χρειάζεται σήμερα σειριακά τερματικά; Ακόμα και αν έχουμε headless μηχανήματα υπάρχει πάντα η δυνατότητα του ssh. Βέβαια μια κανονική σειριακή κονσόλα - και όχι απλό τερματικό - μας δίνει τη δυνατότητα να έχουμε όλα τα μυνήματα ήδη από την εκκίνηση του μηχανήματος καθώς και single user mode. Έτσι μπορούμε πραγματικά να αποσυνδέσουμε το πληκτρολόγιο και οθόνη από το server μας γνωρίζοντας ότι μπορούμε να κάνουμε τα πάντα από την σειριακή κονσόλα.

Ωστόσο το παραπάνω μίνι project είχε στη δική μας περίπτωση ένα άλλο πιο προφανή σκοπό: καθώς τα σειριακά ή "κουτά" τερματικά αναφέρονται ήδη στην ύλη του μαθήματος "Δίκτυα Υπολογιστών" των ΕΠΑΛ, είναι μια καλή ευκαιρία να δουν και οι μαθητές πως λειτουργεί στην πράξη κάτι τέτοιο και τι δυνατότητες και περιορισμούς έχει. Όπως βλέπετε και στη φωτογραφία, εγκαταστήσαμε το τερματικό μας σε μια γωνιά του Εργαστηρίου (το οποίο είναι ήδη βασισμένο σε FreeBSD) και αναρτήσαμε και μια αρκετά καλή περιγραφή για το τι είναι και πως λειτουργεί. Και φυσικά κάθε μαθητής μπορεί να το δοκιμάσει μόνος του!


Σειριακό Τερματικό


Είναι αρκετά απλό στην πραγματικότητα. Χρειάζεται το κεντρικό σας μηχάνημα να διαθέτει σειριακή θύρα. Σε πολλά καινούρια μηχανήματα η θύρα αυτή απουσιάζει. Ρίξτε ωστόσο μια ματιά στην μητρική: είναι αρκετά πιθανό να διαθέτει κάποιο header στο οποίο να μπορεί να συνδεθεί η αντίστοιχη καλωδιοταινία που καταλήγει στο γνωστό μας βύσμα DB9 (που στην πραγματικότητα λέγεται DE9). Για τερματικό μπορείτε να χρησιμοποιήσετε πρακτικά ένα οσοδήποτε παλιό μηχάνημα: στην πιο απλή περίπτωση, μπορείτε σε αυτό να εκτελέσετε το παλιό (κακό) DOS - ακόμα και από δισκέτα - και ένα πρόγραμμα σειριακής επικοινωνίας / εξομοίωσης τερματικου. Στη δική μας περίπτωση κάναμε ακριβώς αυτό: χρησιμοποιήσαμε το telix, πρόγραμμα για DOS. Το μηχάνημα που χρησιμοποιήσαμε για τερματικό είναι ένα Pentium 200Mhz (αρκετά ισχυρό για αυτή τη χρήση!) αλλά εύκολα μπορείτε να βάλετε ακόμα και... 8088. Φτιάξαμε ένα συνηθισμένο καλώδιο τύπου null modem και ακολουθήσαμε τις απλές οδηγίες στο FreeBSD Handbook:

http://www.freebsd.org/doc/el/books/handbook/term.html

Για μια απλή σειριακή κονσόλα, το μόνο που χρειάζεται είναι η παρακάτω γραμμή στο /etc/ttys:

ttyu0    "/usr/libexec/getty std.115200"    vt100    on  secure


Αν είστε λίγο παρανοικός ίσως θέλετε να μετατρέψετε το "secure" σε "insecure" ώστε να μην επιτρέπεται το root login μέσω της σειριακής ;)

Προσέξτε ότι σε FreeBSD 8.x η πρώτη σειριακή θύρα (η γνωστή μας COM1) θα είναι ttyu0 ενώ σε 7.χ θα είναι ttyd0. To 115200 δίνει την ταχύτητα της σύνδεσης. Αν χρησιμοποιείτε ένα πραγματικά παλιό μηχάνημα σαν τερματικό το πιθανότερο είναι να μην μπορέσετε να ανεβείτε τόσο ψηλά και να πρέπει να περιοριστείτε στα 9600 bps. Αμέσως μετά, το μόνο που χρειάζεται να κάνετε είναι:

# kill -HUP 1

ώστε η init να ξαναδιαβάσει το /etc/ttys και να ξεκινήσει η getty να εκτελείται στη σειριακή θύρα. Από τη μεριά του τερματικού, έχοντας συνδέσει το σειριακό καλώδιο μπορούμε να ρυθμίσουμε την επικοινωνία μας:

Ταχύτητα: 115200 (ή όσο βάλαμε στη γραμμή παραπάνω)
Data bits: 8
Parity: None
Stop bits: 1

το γνωστό δηλ. στους παλιούς 115200,8,Ν,1 ;) Η ρύθμιση γίνεται στο πρόγραμμα σειριακής επικοινωνίας που έχουμε εγκαταστήσει. Αν για κάποιο λόγο τρέχετε Windows (περαστικά σας) μπορείτε να χρησιμοποιήσετε το hyperterminal.

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

Σειριακή Κονσόλα



Η παραπάνω διαδικασία είναι πράγματι απλή, αλλά δεν μας επιτρέπει να δούμε τα μυνήματα εκκίνησης ή να ξεκινήσουμε το μηχάνημα σε single user mode, καθώς ενεργοποιείται μόνο μετά που το σύστημα φτάσει σε πλήρη λειτουργία. Για να το επιτύχουμε αυτό, πρέπει να ενεργοποιήσουμε την σειριακή κονσόλα:

http://www.freebsd.org/doc/el/books/handbook/serialconsole-setup.html

Η διαδικασία γίνεται προσθέτοντας τις παρακάτω γραμμές στο αρχείο /boot/loader.conf:

boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
console="comconsole,vidconsole"


Με αυτές τις επιλογές ενεργοποιείται ταυτόχρονα τόσο η σειριακή όσο και η κανονική κονσόλα (multicons), στο επόμενο boot φυσικά. Προσέξτε την επιλογή comconsole_speed που καθορίζει προσαρμοσμένη ταχύτητα 115200. Αν δεν τη βάλετε, η ταχύτητα σας θα μείνει στην προεπιλεγμένη των 9600 bps.

Βέβαια και εμείς που τη βάλαμε δεν έγινε τίποτα: Η σειριακή κονσόλα πεισματικά παρέμεινε στα 9600 bps. Δοκιμάσαμε και με FreeBSD 7.X για να σιγουρευτούμε ότι δεν πρόκειται για κάποιο bug/feature του 8.X, αλλά δεν άλλαξε τίποτα. Τελικά καταλήξαμε στην εναλλακτική λύση που περιγράφεται στο Handbook, δηλ. την επαναμεταγλώττιση και εγκατάσταση των boot blocks:

# cd /usr/src/sys/boot/
# make clean
# make BOOT_COMCONSOLE_SPEED=115200
# make install


Μετά από αυτό, το serial console λειτούργησε υπέροχα στα 115200 bps. Μπορείτε να δείτε το ταυτόχρονο boot (vidconsole,comconsole) στο δοκιμαστικό μηχάνημα μου: