Ποιά η εντολή από τον server γιά κλείσιμο τερματικού LTSP μέσω LAN;

Ξεκίνησε από mandarinos, 13 Ιαν 2025, 11:54:22 ΠΜ

« προηγούμενο - επόμενο »

mandarinos

Παρακαλώ γιά τη βοήθειά σας! (Όποιος γνωρίζει.)

............................

Επειδή γράφω ένα πρόγραμμα (*) γιά την πλατφόρμα του LTSP (**) (συγκεκριμένα, γιά να φαίνονται στους greeters των τερματικών μόνον οι μαθητές / users που έχουν μάθημα τη συγκεκριμένη ώρα, κι όχι όλα τα 250-300 ονοματεπώνυμα του σχολείου), είναι απαραίτητο να γνωρίζω (και) ποιά είναι η εντολή κλεισίματος τερματικού, ώστε να την καλέσω.

Το σκεπτικό είναι:

(α) Ότι στο ltsp.conf βάζω κάτω από κάθε τερματικό ότι (την τάδε διδακτική ώρα) μπαίνει η ομάδα [laboratory1], ή [laboratory2], κλπ, αναλόγως. Όχι δήλωση τύπου: PWMERGE_SGR="[a-c][1-5]".

(β) Άρα, λίγο μετά το διάλειμμα (με τις time functions καθάρισα εύκολα!), το πρόγραμμά μου πρέπει:
  • να δώσει επιλεκτικό shutdown στα τερματικά (γιά κάθε εργαστήριο ξεχωριστά),
  • να αφαιρέσει από το group [laboratoryX] τους μαθητές που ήταν στην ώρα που τελείωσε (αυτό ok, το πέτυχα),
  • να κάνει useradd στη [laboratoryX] αυτούς της επόμενης ώρας, αντιγράφοντάς τους από την ομάδα του (ημι)τμήματός τους, πχ το Α'1 β, το Γ'3 α, κλπ (κι αυτό το πέτυχα),
  • να στείλει την εντολή initrd (ο επόμενος στόχος είναι να βρω αυτήν, αλλά όλα στην ώρα τους! :) ),
  • να στείλει εντολή wakeonlan ανά εργαστήριο. (Αυτή την ξέρω, τη δοκίμασα, δουλεύει μιά χαρά - με δεδομένες τις mac addresses των τερματικών· βέβαια, απαιτείται πρώτα εγκατάστασή της.)

Στο (1), λοιπόν, κόλλησα.

............................

Επειδή, όμως, δεν είμαι της νοοτροπίας "- Πέσε πίττα, να σε φάω!", τί έκανα, γιά να δώ πώς γίνεται το shutdown:

  • Έψαξα (εντάξει, όχι πολύ) τον source code του Επόπτη, αλλά ειλικρινά δεν βρήκα άκρη. (Στην Python είμαι αρχάριος, είδα ότι το source code του Επόπτη συνεχώς καλεί βιβλιοθήκες, αλλά δεν έβγαλα νόημα.)
  • Έψαξα (σ)το Διαδίκτυο. Η απάντηση που βρήκα, είναι ότι η κατάλληλη εντολή (ειδικά γιά το LTSP, όχι απλά γιά τερματικό επάνω σε LAN) είναι η εξής:

ssh user@client_ip_or_hostname sudo shutdown -h now (***)

και με παράμετρο -p 22 (ή -p 7100), αν θέλω ν' ακούει συγκεκριμένο port.

Συνεπώς, αντέγραψα από τον Επόπτη το ip ενός ανοικτού τερματικού και δοκίμασα (δύο φορές ανά περίπτωση) με:

ssh -p 22 admin@10.xxx.xxx.65 sudo shutdown -h now (λάθος!)
ssh -p 7100 admin@10.xxx.xxx.65 sudo shutdown -h now (λάθος!)

ssh -p 22 kapoios-sygkekrimenos-yparxwn-user-logged-in@10.xxx.xxx.65 sudo shutdown -h now, (αφού πρώτα έκανα log in μέσω Επόπτη έναν user που δεν έχει κάν συνθηματικό)

ssh -p 7100 kapoios-sygkekrimenos-yparxwn-user-logged-in@10.xxx.xxx.65 sudo shutdown -h now,

αλλά έπεσα επάνω σε access denied (είτε με port 22, είτε με port 7100)... και η δουλειά μου δεν γίνεται.

Επίσης, πάλι δεν έχει αποτέλεσμα το:

sudo visudo

και προσθήκη της γραμμής:

user ALL=(ALL) NOPASSWD: /sbin/shutdown

(Και μετά reboot του server, να πάρει τις νέες ρυθμίσεις.)

Ακόμη: η εντολή δεν αναγνωρίζει hostnames (γιατί, όμως; ), μόνο ip's, και απορώ αν πρέπει οπωσδήποτε να υπάρχει user logged in. (Δεν γίνεται να κλείσω το τερματικό από τον server, ενόσω αυτό βρίσκεται απλά στην οθόνη εισόδου; Αφού ο Επόπτης το κάνει!)

Επίσης, στα αρχεία ρυθμίσεων του ssh βλέπω ότι το port 22 είναι commented out. Πρέπει να το κάνω uncomment, ή (εναλλακτικώς) να βάλω σαφώς δήλωση "port 7100";

Τί παρέλειψα, ή τί κάνω λάθος;

Ευχαριστώ θερμότατα εκ των προτέρων γιά τις τυχόν απαντήσεις σας!

............................

(*) Σε Gambas3 (v. 3.19.5), που τη βρίσκω τρομερά εύκολη και διαχειρίσιμη. Και με άδεια GNU.

(**) Εάν κλείσω την εμφάνιση ονομάτων στον greeter του κάθε τερματικού, φυσικά το συγκεκριμένο πρόγραμμα είναι τελείως άνευ σημασίας· ο κάθε μαθητής θα μπαίνει απλά με το user name του και ίσως και με το συνθηματικό του, χωρίς να ψάχνει 250-300 ονοματεπώνυμα. Θεωρώ, όμως, ότι βοηθάει τις μικρότερες ηλικίες - ενδεχομένως Δημοτικά που δουλεύουν LTSP, ή και πρώτες τάξεις Γυμνασίου.
Μ' άλλα λόγια, είναι μιά (ίσως περιττή) ξεχωριστή προσθήκη στη διαχείριση ΣΕΠΕΗΥ.

Στο κάτω-κάτω, και άχρηστο να θεωρηθεί, το συγκεκριμένο πρόγραμμα είναι μιά πολύ καλή (εξ)άσκηση γιά την αφεντιά μου, και "μαγιά" γιά τα επόμενα που θέλω να φτιάξω.

(***) Οι διαδικτυακές αναφορές λένε ότι συνήθως σε εγκατάσταση LTSP υπάρχει παράλληλα και το ssh εγκατεστημένο. Όντως, ισχύει στον server μου.

din_os


mandarinos

Ευχαριστώ γιά τη συμβουλή!

Ρώτησα ήδη, αρκετές μέρες πρίν. Όπως και το Grok2. (Το Κινέζικο το DeepSeek δεν τό 'χω δοκιμάσει ακόμη. Αργότερα. Ρωτάω εδώ και κάμποσο καιρό γιά θέματα προγραμματισμού, κυρίως γιά να μην απασχολώ με ερωτήσεις τα φόρουμς, όπου συμμετέχω.)

Απάντησαν ότι πρέπει να στείλω συγκεκριμένη εντολή στο epoptes-client κάθε τερματικού (αν και οι απαντήσεις τους διέφεραν στη σύνταξη της εντολής), κι αυτό κάνει τη δουλειά.
Οκ, είναι ένα σχήμα που μέχρι τώρα δεν είχα συνηθίσει (*). Αλλά η ιδέα είναι εύκολο να κατανοηθεί: απευθύνεσαι (εκτός από το στάνταρ να δώσεις εντολές του ΛΣ) σε έτοιμα modules (που τρέχουν στο background), χωρίς να χρειαστεί να γράψεις εσύ όλες τις υπορρουτίνες από το μηδέν.

Μόνο που τα πάντα θέλουν δοκιμή στην πράξη - και δεν δούλεψαν αμφότερες οι απαντήσεις τους! (Το τί φταίει, θα το βρω με την ησυχία μου.)

Μιά που αναφέραμε τις ΤΝ, ειρήσθω ότι η μεν ChatGPT έχει μιά ακρίβεια απαντήσεων κάπου στο 95%, το δέ Grok2 λίγο καλύτερη, 97-98%. Μην επαφίεστε, όμως, απόλυτα σ' αυτές, διότι το 100% δεν το έχουν ακόμη. (**) Συνεπώς, τα πάντα θέλουν οπωσδήποτε δοκιμή στο πληκτρολόγιο.
Απλώς, με τις ΤΝ κόβουμε δρόμο, αντί γιά ψάξιμο με τα ψαχτήρια και ανάγνωση βιβλίων αναφοράς. Γινόμαστε τεμπέληδες πολυτελείας, δηλαδή! :)

..........................................
(*) Έχω να προγραμματίσω εδώ και 30 χρόνια, κυρίως διότι με εμπόδιζαν τα απαράδεκτα ελαττώματα κάθε "in" γλώσσας.
  • Γλώσσα χωρίς compiler -Python- εν έτει 2025,
  • γλώσσα μή παραθυρική (πάλι καλά, που υπάρχουν IDE's γι' αυτήν!) -η C- στην εποχή μας,
  • γλώσσα -Java-, που γιά να γράψεις μιά "καλημέρα" στην οθόνη, θες πρώτα έξι μήνες διάβασμα (έχουμε και δουλειές!),
  • γλώσσες με (ενοχλητικές, αν και ίσως ουσιαστικές) αλλαγές από έκδοση σε έκδοση (πάλι Java),
  • γλώσσες non-ASCII standardized (κάτι C# και κάτι τέτοιες)...

Έ, εντάξει!

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

Δεν έβρισκα το εργαλείο που ήθελα, μέχρις ότου βρήκα τη Gambas3 από σπόντα.

(**) Ως αντιπαράδειγμα, και μπροστά στους μαθητές μου: τις ρώτησα ποιά είναι η τελευταία έκδοση της Gambas3. Η ChatGPT απάντησε η 3.19.5, το δε Grok2 η 3.20 . Αμφότερα λάθος, είναι η 3.20.1 · άσχετο αν θεωρείται stable, ή όχι.