Γράψτε Ιαπωνικά σε Ubuntu linux 18.04 μέσω anthy

Για την εγκατάσταση του anthy δίνουμε στο τερματικό τις παρακάτω εντολές:

<pre><code>
sudo apt-get install ibus-anthy anthy*
sudo apt-get install fonts-takao*
</code></pre>

Και μετά αποσυνδεθείτε (κάντε logout) και επανασυνδεθείτε (κάντε login). Ύστερα ανοίξτε το κεντρικό μενού (activities) είτε πατώντας το start (super) πλήκτρο είτε επιλέγοντας το εικονίδιο Το εικονίδιο για τις δραδτηριότητες (κεντρικό μενού εφαρμογών). Με το που το κάνετε αυτό θα δείτε το παρακάτω παράθυρο, σε αυτό αναζητήστε την λέξη settings ή την λέξη ρυθμίσεις και κάντε κλικ στο αντίστοιχο εικονίδιο:

Επιλογή των ρυθμίσεων από τις δραστηριότητες.

Ύστερα στο παράθυρο που έχει ανοίξει επιλέγουμε «Περιοχή και Γλώσσα» και ύστερα κάνουμε κλικ στο εικονίδιο με το σύμβολο + στο section «Πηγές εισόδου»:

Επιλογές για [ρποσθήκη γλώσσας στο πάνελ των ρυθμίσεων.

Στο παράθυρο που έχει ανοίξει πατάμε το εικονίδιο με τις 3 κάθετες βούλες () και αναζητάμε την λέξη «Ιαπωνικά» στο πλαίσιο εισόδου που εμφανίζετε. Μετέπειτα επιλέγουμε την επιλογή Ιαπωνικά:

Ύστερα στις επιλογές επιλέγουμε «Ιαπωνικά(Anthy)»:

Τέλος κάνουμε κλικ στο κουμπί «Προσθήκη».

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

Τρόπος γραφής:

Για να γράψετε hiragana απλά δείτε το Πινακάκι που είναι στον σύνδεσμο: <a class=»postlink» href=»https://en.wikipedia.org/wiki/Hiragana#Table_of_hiragana»>https://en.wikipedia.org/wiki/Hiragana# … f_hiragana</a> (Εκεί που αναγράφει: «Table of hiragana») και απλά γράψτε με λατινικούς χαρακτήρες (ρομάντζι – ロマン字) και πατώντας Enter το μετατρέπει σε Hiragana. Για να γίνουν σε kanji απλά πατάτε στο space πριν πατήσετε enterν ε΄αν δεν είναι αυτό που θέλετε να γράψετε πατάτε space πολλές φορές μέχρι να βρεθεί η διαθέσιμη.

πχ. Για την λέξη たべもの (Μετάφραση: φαγώσιμα αντικείμενα) πληκτρολογείτε tabemono + Enter ενώ για να εμφανιστεί έτσι (με κάντζι) 食べ物 πληκτρολογείτε tabemono + Space + Enter.

Ενώ η εναλλαγή με κατακάνα γίνετε με τον τρόπο που λέει η παρακάτω εικόνα:
<img class=»alignnone size-full wp-image-843″ src=»https://pcmagas.files.wordpress.com/2016/06/1466409148.png» alt=»1466409148″ width=»1118″ height=»349″ />

Ακόμη για να δείτε τι πρέπει να πληκτολογείτε για να γράψετε katakana θα το δείτε στο: <a href=»https://en.wikipedia.org/wiki/Katakana#Table_of_katakana»>https://en.wikipedia.org/wiki/Katakana#Table_of_katakana</a&gt;. Αλλά έχει και κάποιιους έξτρα συνδιασμούς που δεν αναφέρονται στον πίνακα (βλ. παρακάτω).
<h2>Προσοχή:</h2>
Πολλές φορές ο χαρακτήρας は(ha) διαβάζεται σαν wa.
Όμως για να γράψετε προτάσεις όπως πχ:
私はげんきです。 (Μετάφραση: Είμαι καλά στην υγεία μου.)
Πληκτρολογείτε :
Watashi + Space+Enter+ha+enter+genki+enter+desu+.

(Δώστε βάση στα έντονα γράμματα στο παραπάνω παράδειγμα)

Ομοίως και για το を(wo) που πολλές φορές διαβάζεται σαν ο.
πχ. 私はすしをたべました。 (Μετάφραση: Εγώ έφαγα σούσι.)
Πληκτρολογείτε:
Watashi+space+enter+sushi+enter+wo+tabemashita+enter+.

Ακόμη πολλές φορές θέλουμε να βάλουμε ένα μικρό つ όταν η λέξη κατά την ανάγνωση χρειάζεται μια παύση. Όπως στην λέξη けっこん (Μετάφραση γάμος) απλά πληκτρολογούμε τον ήχο που κάνει παύση. Αυτός ο τρόπος ισχύει και για κατακάνα.
πχ. Για την λέξη けっこん πληκτρολογούμε kekkon+enter. Ομοίως και σε παρόμοιες λέξεις όπως ろっぴゃく πληκτρολογούμε roppyaku+enter.

Ακόμη σε Κατακάνα έχουμε και κάποιους έξτρα συνδυασμούς χαρακτήρων όπως チィ ( διαβάζετε τι ). Εάν γράψουμε ti θα μας βγεί チ γι αυτό γράφουμε tyi .
<blockquote>Ένας καλός μνημονικός κανόνας είναι ότι εάν δεν βγαίνει ο σωστός συνδυασμός πριν το πρώτο γράμμα του συνδυασμού βάλε ένα y. Πχ. Στο προηγούμενο παράδειγμά μας το πρώτο γράμμα είναι το t και η αντιστοιχία σε ρομάντζι είναι ti (όπως διαβάζουμε πάντα) ε μετά το τ βάζουμε ένα y.</blockquote>

Ακόμη για να δείτε τι πρέπει να πληκτρολογήσουμε προκειμένου να προκειμένου να εμφανιστεί το κατάλληλο hiragana/katakana πρέπει να ακολουθήσετε τα κάτωθι βήματα:

Πρώτα αλλάξτε σε Ιαπωνική διάταξη και στο μενού αλλαγής γλώσσας επιλέξτε την επιλογή «Προτιμήσεις Anthy»:

Μετά στο παράθυρο που έχει ανοξει επιλέξτε «Typing Method» και μετά το κουμπί με τις 3 τελείες εκεί που αναγράφει «Πίνακας πλήκτρων Ρομάτζι»:

Ύστερα στο παράθυρο που ανοίγει θα δείτε την λίστα του τι πρέπει να πληκτρολογήσετε και τι θα εμφανίσει:

Πλέον μπορείτε να γράψετε Ιαπωνικά και το πολυπόθητο Lovwe Letter στην sempai σας!!!!!

Advertisements

Εντοπισμός documentation της βιβλιοθήκης libcrypt της OpenSSL για υπάρχουσες μεθόδους σε διανομές GNU/Linux.

Στο master thesis μου έπρεπε να κάνω ένα demo που να υλοποιεί ένα group key agreement. Μετά από πολύ ψάξιμο κατέληξα στην OpenSSL λόγο ότι έχει low level apis για να αναπτύσσεις ΚΑΙ δικό σου κρυπτογραφικό πρωτόκολλο.

Παρόλα αυτά υπήρχε δύσκολο-προς-εντοπισμό documentation έτσι το παρόν άρθρο το χρησιμοποιώ σαν index για το τι πρέπει να δώσω στην εντολή man ή που να πάω προκειμένου να μπορέσω να βρω πως χρησιμοποιείτε οι functions της βιβλιοθήκης.

  1. Getting Started βασική χρήση: Σύνδεσμος
  2. Diffie Hellman: Μεταβείτε σε αυτήν την σελίδα κάντε copy το όνομα μιας μεθόδου και σε τερματικό δώστε:
    man ^paste_την_function_που_κάνατε_copy_εδώ^
  3. BigNum για αριθμητική αριθμών για που λαμβάνουν μεγάλο χώρο στην μνήμη πχ.1024 ή 2048 bit ακεραίων:
    1. Όλες oι functions καταλογραφημένες είναι στο αποτέλεσμα της εντολής:
      man bn
    2. Για εκάστοτε function αναζητήστε:
      man ^όνομα_function_προηγούμενου_βήματος^
  4. Επίσημο Documentation για όλες της μεθόδους εδώ. Για εντοπισμό εγκατεστημένης έκδοσης δίνετε στο τερματικό:
    openssl version

Επικοινωνία με το πρωτόκολλο Xmpp μέσω XMPP.js: Προβλήματα και workaround.

Ο παρακάτω οδηγός είναι υπό συχνή ανανέωση καθώς καταγράφω της εμπειρίες μου όπως αναπτύσσω εφαρμογές με την βιβλιοθήκη xmpp.js

Στο master thesis μου έπρεπε να αναπτύξω μια εφαρμογή σε electron και Node.js που ουσιαστικά ήταν ένας xmpp client. Κατά την ανάπτυξη αυτής συνάντησα τα εξής προβλήματα αξιοποιώντας αυτήν την βιβλιοθήκη, τα οποιά στην συνέχεια σας δείχνω πως τα έχω επιλύσει.

Σύμφωνα με την τεκμηρίωση της βιβλιοθήκης ο συνιστώμενος κώδικας είναι ο εξής:



const xmpp = client({
service: 'xmpp://example.com',
domain: 'example',
username: 'user',
password: 'password',
})

xmpp.on('error', err => {
console.error('❌', err.toString())
})

xmpp.on('offline', () => {
console.log('🛈', 'offline')
})

xmpp.on('online', async address => {
console.log('🗸', 'online as', address.toString())

// Sends a chat message to itself
const message = xml(
'message',
{type: 'chat', to: address},
xml('body', 'hello world')
)
xmpp.send(message)
})

xmpp.on('stanza', stanza => {
console.log('⮈', stanza.toString())
xmpp.stop()
})

xmpp.start()
 Όμως έτσι σκέτος μου παρουσιάζει το εξής πρόβλημα, λόγο ότι  by default ενεργοποιεί SSL/TLS συνδέσεις, δεν μου επιτρέπει να διαχειρηστώ την περίπτωση που η SSL/TLS σύνδεση χρησιμοποιεί Self-signed πιστοποιητικά. Αυτό είναι γενικότερο θέμα της Node.js στον τρόπου που διαχειρίζεται το SSL. Λύνετε απλά θέτοντας την μεταβλητή περιβάλλοντος NODE_TLS_REJECT_UNAUTHORIZED στην τιμή 0. Πέρα από τις εντολές κονσόλας npm κλπ κλπ μπορεί να γίνει και μέσω κώδικα javascript, απλά προσθέστε στην αρχικό script που εκτελεί η εφαρμογή σας την παρακάτω γραμμή κώδικα:
process.env.NODE_TLS_REJECT_UNAUTHORIZED=0

Καλή ιδέα είναι να εκτελείτε η παραπάνω όταν είστε σε περιβάλλον ανάπτυξης και μόνο.

Πέρα από αυτό όταν κάνεις έναν client πρέπει να μπορείς να εμφανίζεις τουλάχιστον τον κατάλληλο μήνυμα είτε στον τελικό χρήστη είτε στον sysadmin έτσι πρέπει να διαχειρίζεσε κατάστάσεις όπως:

  • Ο χρήστης δίνει λάθος server ή o client δεν μπορεί να επικοινωνήσει στον server.
  • Ο χρήστης δίνει λάθος credentials.

Προσωπικά λόγο της φύσης της Node.js ο τρόπος που μπορούσα να το διαχειριστώ είναι ελέγχοντας μέσω regular expression (well μπορεί να μην σου αρέσει αλλά θέλοντας και μη πρέπει να μάθεις να γράφεις PCRE συμβατές regular expressions) το μήνυμα του σφάλματος. Ένα snippet κώδικα από την εφαρμογή μου που χρησιμοποιεί electron (που έχει ενσωματωμένη nodejs) είναι:

const errorRegex = {
DNS_NOT_FOUND: /^getaddrinfo ENOTFOUND/,
AUTH_FAILED: /^not-authorized/,
}; 
xmpp.on('error', (err) => {
  console.error('Error occured', err.message, Object.getPrototypeOf(err));
  if (errorRegex.DNS_NOT_FOUND.test(err.message)) {
      console.error('Connection Error', `The provided server ${connectionInfo.service} does not exist.`);
     // Add handling stuff here
     destructClient(xmpp);
  } else if (errorRegex.AUTH_FAILED.test(err.message)) {
    console.error('Authentication Error', 'The provided username and password are not valid');
    // Add further handling here
    destructClient(xmpp);
  }
});

Ουσιαστικά ανάλογα με το ποιο regular expression ορισμένο στο αντικείμενο errorRegex εφαρμόζω τον κατάλληλο έλεγχο.

Ακόμη εν λόγο βιβλιοθήκη κάνει αυτόματες επανασυνδέσεις, και το κάνει ΕΠ’ ΑΠΕΙΡΟΝ, πράγμα που δίνει άσχημο user experience στον τελικό χρήστη. Γι αυτό το περιορίζω σε 10 προσπάθειες που με το παρακάτω κομμάτι κώδικα:

let connectionCounter = 10;
xmpp.reconnect.on('reconnecting', () => {
  if (connectionCounter===0) {
    destructClient();
  }
  connectionCounter-=1;
})

Ουσιαστικά κάνω abort με xmpp.stop() που καλείτε εντός της destructClient(). Για μήνυμα σφάλματος δοκιμάστε το να το εκτυπώσετε στο event error:

xmpp.on('error', (e)=>{
 if (err.code === 'ECONNREFUSED' && connectionCounter === 0) {
   dialogsHelper.errorDialog('Connection Error', `Failed to connect into ${err.address}.`);
 }
}

Αξιοδημείωτε δε είναι ότι η διεύθυνση σύνδεσης έρχετε μαζί με το error όπως και ο τύπος του error στη μεταβλητή στιγμιότυπου error.

Επιπλέων ένα θέμα είναι ότι θέλω να τρέχω έναν κώδικα μια φορά όταν ο χρήστης κάνει login, για κάποιο λόγο η βιβλιοθήκη καλεί 2 φορές το event login, όμως δεν θέλουμε να τρέχουν κάποια πράγματα 2 φορές έτσι θα πρέπει να ορίζουμε κάποια μορφής flag που να μην επιτρέπει την εκτέλεση κάποιων κομματιών κώδικα 2 φορές (πχ. να εμφανίζει στον τελικό χρήστη δύο φορές ένα μήνυμα σύνδεσης):


let flag=false

//Some code goes here
xmpp.on('offline', () => {
 flag=false;
}

xmpp.on('online',(address) => {
  if(!flag){
   flag=true;
   console.log(`You logged in as ${address}`); 
  }
})

Επιπλέον τα μηνύματα που αποστέλλονται μέσω XMPP ονομάζονται stanzas και υπάρχονυ πάρα πολλά είδη. Για κάθε ένα είδος ορίζω και μια ξεχωριστή function όπως βλέπετε στον παρακάτω κώδικα:

xmpp.on('stanza',(stanza)=> {
  try {
 if(presenceReply(stanza) !== false) return;
 if(handleRoster(stanza) !== false) return;
 // Add your function here
 } catch(e) {
   console.error(e);
 }
});

Αυτή η δομή λόγο όχι χρησιμοποιεί πολλές function για να επεξεργαστεί καταλλήλως το εισερχόμενο μύνημα πρέπει στην αρχή να ελέγχετε ο τύπος με τον εξής τρόπο πχ στην function presenceReply:

const presenceReply = (stanza) => {
  if(!stanza.is('presence')) return false;
  if(loginAddress.bare().equals(from.bare())) return false;
  
  const from = jid(stanza.attrs.from);
  const message = xml('presence', { to: stanza.attrs.from });
  console.log('Sent To', stanza.attrs.from);
  sendMessage(message);
  return true;
};

Όπως βλέπουμε καλύτερα να ελέγχουμε εάν ο τύπος ΔΕΝ είναι αυτός που ζητάμε και να επιστρέφουμε, από προσωπική εμπειρία αυτό είναι ένας bulletrpoof τρόπος να αποτρέπει στο να σπάει το πρόγραμμα σε ΠΟΛΛΕΣ περιπτώσεις. Ακόμη όπως βλέπετε όταν το μύνημα δεν είναι ο κατάλληλος τύπος επιτρέφουμε false και την τιμή αυτή την ελέγχουμε στην callback το event ‘stanza’, εάν ελέγχθηκε τότε προχωράμε στην επόμενη function η ιδέα είναι ότι δεν θέλουμε να εκτελέσουμε κάποια function εάν ήδη έχουμε επεξεργαστεί το μήνυμα.

Τέλος ο έλεγχος γίνετε ελέγχοντας εάν η τιμή ΔΕΝ είναι false με το σύμβολο !== λόγο ότι με αυτόν τον τρόπο σε επιτιχία μπορούμε επιτρέπουμε να ΜΗΝ επιστρέφει τιμή,
εναλλακτική προσέγγιση είναι η χρήση reqular expression που επιστρέφετε με την μέθοδο stanza.toString(). Ακόμη δε, χρήζει σημείωσης, όλη η σειρά των ifs είναι σε ένα try ... catch block επιτρέποντας όποιο σφάλμα συμβαίνει να ΜΗΝ κρασάρει όλη την εφαρμογή αλλά να μένει και να διαχειρίζεται τοπικά. Ενδεικτικά βάζω console.error αλλά μπορεί στην θέση του να οποιοδήποτε κομμάτι κώδικα.

Ακόμη όταν θέλετε να τραβήξετε όλους τους φίλους και τους κάνετε render, καλό είναι να ακολουθήσετε την εξής διαδικασία (δοκιμασμένη σε electron που ουσιαστικά είναι ένας browser και nodejs που σε αυτόν τρέχω και την xmpp.js άρα δεν υπάρχει communication overhead):

  1. Αποστείλετε ένα roster request.
  2. Όταν το λάβετε κάντε το render.
  3. Όταν γίνει render αποστείλετε ότι είστε online με το δικό σας presence

Για ποιο ολοκληρωμένη εικόνα δείτε την παρακάτω εικόνα, σε περίπτωση web client συνηστώ η χρήση websocket λόγο φόρτου επικοινωνίας.
Διαδικασία μεταξύ Application Backend και Ui για συγχρονισμό και σωστή ενημέρωση αυτού.

Ακόμη δε κατά το event presense response όπου δείχνετε στην πάνω εικόνα να αποστέλλετε ολόκληρο το roster εφόσον το έχετε ενημερώσει εσωτερικά στο backend της εφαρμογής σας (πχ. σε μια in-memory database ή σε ένα object vatiable). Ακόμα θεμιτό είναι να μαζεύετε όσα περισσότερα status updates μπορείτε εάν σας νοιάζει το πάρε-δώσε μεταξύ ui και εφαρμογής. Ακόμη δε να έχετε στον νου σας ότι ένα participant στο roster μπορεί να είναι συνδεδεμένος σε πολλαπλές συσκευές και το status είναι ανά συσκευή.

Κατά την γνώμη μου είναι hacky ο παραπάνω τρόπος αλλά είναι η μόνη βιβλιοθήκη η οποία αναπτύσσετε προς το παρόν και συντηρείτε ενεργά (περίοδο που γράφετε το άρθρο). Αλλά λόγο ότι το API είναι βασικό και σπαρτιάτικο σε "μαθαίνει" xmpp

Το Σκονάκι του Developer: Βασικό περιβάλλον ανάπτυξης Python 2.7 σε Ubuntu GNU/Linux

Γενικά μας βολεύει, εμάς τους προγραμματιστές να έχουμε ένα εικονικό, απομονωμένο, όσο είναι δυνατόν, περιβάλλον ανάπτυξης ανεξαρτήτως γλωσσάς, συστήματος κλπ κλπ προκειμένου να είμαστε όσο το δυνατόν ποιο παραγωγικοί. Η python είναι μια γλώσσα η οποία στο οικοσύστημά της φέρει εργαλεία τα οποία μας βολεύουν στην ανάπτυξη. Αυτά είναι το pip (για εγκατάσταση εξωτερικών βιβλιοθηκών) και το virtualenv (για εικονικά, απομονωμένα περιβάλλοντα ανάπτυξης)

Κατ’ αρχάς πρέπει να εγκαταστήσουμε την python και τα βασικά πακέτα-εργαλεία:

sudo apt install python python-pip git
sudo -Η pip install --upgrade pip //Ενημέρωση εντολής pip λόγο ότι αυτή που διέρχεται από τα πακέτα μπορεί να είναι παπαλειωμένη
sudo -Η pip install virtualenv

Πλέον εάν δεν διαθέτετε ένα project python δημιουργούμε ένα μέσω των εντολών:

mkdir myProject
cd myProject
git init
Σημείωση 01: Τα καλά παιδάκια, όταν αναπτύσσουν κώδικα, χρησιμοποιούν ΠΑΝΤΑ version controll, ειδάλλως θα φάνε φάπα. :Q
Σημείωση 10: Το git είναι το ποιο δημοφιλές και θα το συναντήσεις συχνά στην επαγγελματική σου ζωή, εκτός εάν είσαι κωλόφαρδος και χρησιμοποιούν κάποιο άλλο. Γι αυτό μάθε το

Εάν έχετε ήδη ένα project δίνετε την εντολή (όπου ^φάκελος_του_project^ είναι ο φάκελος ο οποίος εμπεριέχει όλα τα αρχεία του κώδικα):

cd ^φάκελος_του_project^

Πλέον δημιουργούμε ένα εικονικό περιβάλλον με την εντολή:

virtualenv ^ονομα_virtualenv^

Συνήθως χρησιμοποιείτε έτσι:

virtualenv env

Όπου ^ονομα_virtualenv^=env. Γενικά το όνομα του virtual περιβάλλοντος ορίζετε στην παράμετρο ^ονομα_virtualenv^.

Πλέον μπορείτε ενεργοποιήσετε το εικονικό περιβάλλον με την εντολή:

source ^φάκελος_του_project^/^ονομα_virtualenv^/bin/activate

Και να το απενεργοποιήσετε μέσω της εντολής:

deactivate

Πλέον μπορείτε να εγκαταστήσετε τα πακέτα μέσω της εντολής:

pip install ^όνομα_πακέτου^ && pip freeze >> dependencies.txt

Και έαν έχετε ένα project με τις εξαρτήσεις σε ένα αρχείο .txt που δημιουργήθηκε με την παραπάνω εντολή η εγκατάσταση γίνετε μέσω:

pip install -r dependencies.txt

Εφόσον έχει δημιουργηθεί το εικονικό περιβάλλον πρώτα.

Μινιμαλιστικό Περιβάλλον Desktop για χρήση desktop με Openbox σε ubuntu 18.04 server/mini iso

Προσωπικά θα επιθυμούσα με μερικές περιπτώσεις να είχα ένα περιβάλλον desktop που να καταναλώνει τους ελάχιστους δυνατούς πόρους από άποψη μνήμης, αλλά να προσφέρει 2-3 βασικά features. Προϋποθέτουμε ότι έχουμε εγκαταστήσει το ubuntu server iso ή το mini iso και σε αυτό θα κάνουμε μικρές αλλαγές προκειμένου να μπορεί ο χρήστης να τρέξει ένα βασικό desktop με fluxbox. Εφόσον το εγκαταστήσουμε στον δίσκο (τα βήματα δεν καλύπτονται από τον παρόν οδηγό) και μετά επιτυχή εγκατάσταση εφόσον πάρουμε περιβάλλον κονσόλα δίνουμε (σε περιβάλλον server ίσως να χρειαστεί και το multiverse πακέτο):

gnome-settings-daemongnome-settings-daemonsudo apt-get install xinit openbox network-manager ubuntu-restricted-extras terminator ifupdown net-tools apt-dbus gnome-settings-daemon

Ακόμη, εάν τρέχετε σε virtualbox, για καλύτερη ανάλυση πατήστε την επιλογή στο menu Συκευές -> Εισαγωγή δίσκου με τις προσθήκες επισκέπτη και μετά δώστε τις παρακάτω εντολές.

sudo mount /dev/cdrom /mnt
cd /mnt
sudo ./VBoxLinuxAddictions.run
cd
sudo umount /mnt

Μετά προκειμένου με το login ο χρήστης να τρέχει το fluxbox δίνετε την εντολή:

nano ~/.xsession

Και μετά τοποθετούμε το παρακάτω script:

#!/bin/bash
exec openbox-session

Με το συνδιασμό των πλήκτρων CTRL+O για να αποθηκεύσουμε τις αλλαγές και μετά με τον συνδυασμό των πλήκτρων CTRL+X για έξοδο.
Μπορούμε να δούμε το εάν παίζει σωστά με την εντολή:

startx

Όπως θα δείτε θα έχει μια απλή οθόνη με ένα δεξί-κλικ μενού με όλο το λογισμικό και τίποτε άλλο. Αυτό όμως δεν είναι βολικό για καμία χρήση έτσι για να έχουμε ένα βασικό μενού μπορούμε να έχουμε τις εξής προσεγγίσεις:

  1. Εγκατάσταση βασικού panel (lxpanel)
  2. Χρήση Cairo dock

Λύση 1: Εγκατάσταση βασικού panel (lxpanel)
Εγκαθιστούμε τα κάτωθι πακέτα:

 apt-get install xbacklight lxappearance lxpanel lubuntu-default-settings

Και μετά προκειμένου να είναι εφικτός ο τερματισμός από gui κάνουμε edit το αρχείο ~/.config/lxpanel/default/config και βάζουμε στο τέλος την κάτωθι εγγραφή:

Logout=lxsession-logout

Εάν ΔΕΝ εγκαταστήσετε το cairo dock εγκαταστήστε τον διαχειριστή αρχείου pcmanfm.

 apt-get install pcmanfm 

Μετά δίνουμε την εντολή:

nano ~/.config/openbox/autostart

Και τοποθετούμε στο τέλος:

lxpanel &

Λύση 2: Εγκατάσταση cairo dock

sudo apt-get install cairo-dock

Μετά δίνουμε την εντολή:

nano ~/.config/openbox/autostart

Και τοποθετούμε στο τέλος:

cairo-dock -c &

Εάν επιθυμείτε να το προσαρμόσετε τότε κάντε δεξί κλικ σε αυτό και ρυθμίστε το όπως επιθυμείτε. Μια καλή προσαρμογή θα ήταν να ενεργοποιούσατε την επιλογή «Περιοχή Ειδοποιήσεων Παλιά» προκειμένου να έχετε εμφανήσημο το μενού του network manager.

Η επόμενη βασική ρύθμιση είναι η δυνατότητα ρύθμισης δικτύου. Για να γίνει αυτό, θα πρέπει να μπορούμε να ρυθμίζουμε μέσω ui τις συνδέσεις δικτύου για να γίνει πρέπει πρώτα να αφαιρέσουμε το nplan (εάν είναι εγκατεστημένο):

sudo systemctl stop networkd-dispatcher
sudo systemctl disable networkd-dispatcher
sudo systemctl mask networkd-dispatcher
sudo apt-get purge nplan netplan.io

Και να εγκαταστήσουμε το ifupdown:

sudo apt-get install ifupdown

Μετά δίνουμε την εντολή:

sudo cp /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf_bak

Και στο αρχείο /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf βάζουμε το περιεχόμενο:

[keyfile]
unmanaged-devices=none

Μετά στο αρχείο /etc/NetworkManager/NetworkManager.conf αλλάζουμε την ρύθμιση από (μεσω nano text editor):

managed=false

Σε

managed=true

Μαι μετά εγκαθιστούμε τον network manager με την εντολή:

sudo apt-get install gnome-network-manager

Και στο τέλος του αρχείου ~/.config/openbox/autostart τοποθετούμε:

nm-applet&
sudo apt-get install wincd

Και στο τέλος του αρχείου ~/.config/openbox/autostart τοποθετούμε:

wincd&

Ακόμη δε λοιπές ρυθμίσεις όπως εναlλακτής γλώσσας, ρύθμιση έντασης κλπ κλπ ρυθμίζονται ΠΛΗΝ αυτή του δικτύου είτε μέσω lxpanel είτε μέσω cairo-dock

Τέλος μένει να ρυθμίσουμε την έναρξη του xorg κατά την σύνδεση, για να γίνει αυτό τέλος του αρχείου ~/.bashrc την εντολή:

startx

που μπορεί να γίνει δια του text editor nano, παρόλα αυτά λόγω κάποιον επιπλοκών που μπορεί να έχει βάζοντας κατ ευθείας την εντολή

startx

πρέπει αν ελέγξουμε ότι δεν τρέχει ήδη ένα xsession και ότι δεν ήμαστε σε περιβάλλον ασφαλούς κελύφους ssh. Αυτό γίνετε βάζοντας στο τέλος το

/bashrc

τον ακόλουθο κώδικα:

if [ -z $(ps -o sid,comm -A | grep X | awk '{print $1}') ] && [ ! -n "$SSH_CLIENT" ] && [ ! -n "$SSH_TTY" ]; then
  exec startx
fi

Πλέον το βασικό σας μινιμαλίστικο desktop είναι έτοιμο.

Διόρθωση σπασίματα ήχου σε Lubuntu 14.04.5.

Στο netbook Dell inspiron mini 1010 έχω παρατηρήσει ότι η ήχος μου έκανε σπασίματα (με απλά λόγια έπαιζε αλλά έκανε διακοπές και γενικά ο ήχος ήταν για τα πανηγύρια) εκτός αν έπαιζα ήχο (είτε μουσική είτε οτιδήποτε) απ’ ευθείας από Alsa.

Έτσι άνοιγα τον gnome Mplayer (με την κατάλληλη ρύθμιση να χρησιμοποιεί απ’ ευθείας ALSA) και έπαιζα πρώτα λιγα sec από ένα κομμάτι και μετά άνοιγα τον Clementine (που χρησιμοποιεί τον Pulseaudio) για να παίζω την αγαπημένη μου μουσική. Ακόμη στο skype έκανε ουκ ολίγες φορές σπασίματα με αποτέλεσμα να ακούγετε ρομποτικά ο ήχος.

Ανοίγουμε με τον Text editor της αρεσκείας μας ως root (εγώ χρησιμοποιώ τον gedit)

gksu gedit /etc/pulse/default.pa

Βρίσκουμε την γραμμή που λέει

load-module module-udev-detect

 

Και την αλλάζουμε σε:

load-module module-udev-detect tsched=0

Μετά επανεκκινούμε τον υπολογιστή.

Προσομοίωση παιχνιδιών Sega Genesis σε Ubuntu GNU/Linux

Το καλοκαίρι λόγο ότι είχα κάποια ξέμπαρκα ROMS για Sega Genesis έτσι για να σκοτόσω χρόνο είπα να τα παίξω. Προκειμένου να γίνει αυτό χρειαζόμουν έναν emulator, έτσι αξιοποίησα το DOSBox και τον emulator KGEN98 ο οποίος βρίσκετε διαθέσιμος στο https://segaretro.org/KGen98 , το DOSBox είναι διαθέσιμο μέσω αποθετηρίων:

sudo apt-get install dosbox

To KGEN98 είναι καλό να να βρίσκετε στον ίδιο φάκελο όπου είναι τα παιχνίδια. Κατ εμέ η καλύτερη δομή είναι (προϋποθέτω ότι οι παρακάτω φάκελοι είναι στο home folder και θα τους χρησιμοποιώ στα παρακάτω παραδείγματα):

--Genesis
 |- KGEN98
 |- ROMS << εδώ βάζουμε όλα τα παιχνίδια μας

Μετά εκτέλεσα το DOSBox και έτρεξα τις παρακάτω εντολές σε αυτό:

MOUNT C ~/Genesis
C:
KGEN98

Ουσιαστικά προσάρτησα τον φάκελο ~/Genesis (στην δικιά σας περίπτωση εκεί που είναι αποθηκευμένο το KGEN98 και τα παιχνίδια σας) σε έναν εικονικό δίσκο C μετά πήγα σε αυτόν και έτρεξα τον emulator.

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

Παρόλα αυτά ο KGEN98 είναι παλιός emulator ιδιοταγούς λογισμικού ως εκ τούτου προωθόντας το ελέυθερο λογισμικό προτείνω και τον Gens ο οποίος είναι ο ποιο αποδοτικός και τρέχει σε σχετικά mid-spec CPU, είναι διαθέσιμος σε .deb μέσω του sourceforge https://sourceforge.net/projects/gens/ και πρέπει να κατεβάσετε και να εγκαταστήσετε χειροκίνητα από το https://sourceforge.net/projects/gens/ . Εφόσον το κατεβάσετε το .deb κάντε διπλό κλικ και εγκαταστήστε το, εναλλακτικά εάν μέσω gui είναι δύσκολο τρέξτε στο τερματικό:

cd ~/path_where_deb_has_been_downloaded
sudo dpkg -i gens_2.15.5_i386.deb 

‘Υστερα από δοκιμές αυτός ήταν ο ποιο λειτουργικός.