web-dev-qa-db-fra.com

Comment corriger "Erreur d'ouverture du terminal: inconnue." sur le serveur Ubuntu?

J'ai cherché et trouvé des questions similaires mais aucune n'était suffisamment précise ni n'a résolu mon problème. Un exemple serait cette question Le démarrage de programmes basés sur des scripts/terminaux distants via ssh donne une erreur (Erreur lors de l'ouverture du terminal: unknown.) que je n'utilise pas ssh donc -t ne le fera pas Aidez-moi.


L'exécution de webmin a fonctionné pendant des mois et maintenant j'obtiens cette erreur.

En gros, lorsque je tape nano ou vi dans terminal, j'obtiens le message d'erreur "Erreur lors de l'ouverture du terminal: inconnu".

[user@Host ~]# nano
Error opening terminal: unknown.
[user@Host ~]# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
[user@Host ~]# nano
Error opening terminal: unknown.

[user@Host ~]# 

Comment corriger "Erreur d'ouverture du terminal: inconnue." sur Ubuntu 16.04.3 LTS avec Webmin?

Nouvelle information:

  1. Lorsque j'essaie d'exécuter vi ou nano directement sur le serveur au lieu d'utiliser webmin ou ssh pour y accéder à distance, cela fonctionne. Cela pourrait-il simplement être un problème avec Webmin?
  2. Lorsque j'examine les variables d'environnement, il indique TERM=linux, ce qui est cohérent avec mon autre serveur, qui exécute tous les mêmes logiciels.
2
Stuperfied

Le terminal Webmin n'est pas encore interactif. En fait, c'est une interface en ligne de commande.

Vous pouvez en savoir plus , nous en avons beaucoup discuté.

C'est dans notre todo pour le rendre interactif.

0
Ilia Rostovtsev

J'ai rencontré ce problème lorsque j'essayais de modifier des fichiers dans initramfs. C’était le seul fil que j’ai trouvé. Au lieu de chercher un autre correctif, j’ai écrit un script python pour créer un simple éditeur de texte qui fonctionne à l’intérieur de initramfs (et d’autres terminaux pauvres en fonctionnalités).

C'est assez simple, n'affiche qu'une ligne à la fois, vous devez donc appuyer de haut en bas pour changer de ligne, de gauche à droite pour déplacer le curseur et entrer pour enregistrer. Rien d'extraordinaire, mais cela semble fonctionner correctement pour des modifications rapides.

Il nécessite uniquement le module readchar: python3 -m pip install readchar

#!/usr/bin/python3
#Edit a text file inside the initramfs (when other text editors don't work)
'''Compile with: 
libgcc=$(find /lib -name libgcc_s.so.1 | head -n 1)
libutil=$(ldd /usr/bin/python3 | grep libutil | cut -d ' ' -f 3)
pyinstaller --onefile editfile.py  --add-data="$libgcc:." --add-data="$libutil:." --hidden-import readchar
'''
import shutil, sys, readchar


'''
Allow user to edit a line of text complete with support for line wraps and a cursor | you can move back and forth with the arrow keys.
lines = initial text supplied to edit
Prompt= Decoration presented before the text (not editable and not returned)
'''
def text_editor(lines=[], Prompt=''):

    term_width = shutil.get_terminal_size()[0] - 1
    line_num = 0
    if type(lines) in (list, Tuple):
        multiline=True
    else:
        multiline=False
        lines=[lines]


    text = list(lines[line_num])
    ptr = len(text)
    Prompt = list(Prompt)
    space = [' ']

    c = 0
    while True:
        if ptr and ptr > len(text):
            ptr = len(text)


        copy = text.copy()
        if ptr < len(text):
            copy.insert(ptr,'|')
        copy = list(str(line_num)) + space + Prompt + copy

        #Line wraps support:
        if len(copy) > term_width:
            cut = len(copy) + 3 - term_width
            if ptr > len(copy) / 2:
                copy = ['<']*3 + copy[cut:]
            else:
                copy = copy[:-cut] + ['>']*3 

        print('\r'*term_width+''.join(copy), end=' '*(term_width-len(copy)), flush=True)

        if c in (53,54):
            #Page up/down bug
            c = readchar.readkey()
            if c == '~':
                continue
        else:
            c = readchar.readkey()  


        if len(c) > 1:
            #Control Character
            c = ord(c[-1])

            #Save current line on line change
            if c in (53, 54, 65, 66):
                lines[line_num] = ''.join(text)

            if c == 65:     #Up
                line_num -= 1
            Elif c == 66:   #Down
                line_num += 1
            Elif c == 68:   #Left
                ptr -= 1
            Elif c == 67:   #Right
                ptr += 1
            Elif c == 54:   #PgDn
                line_num += 10
            Elif c == 53:   #PgUp
                line_num -= 10
            Elif c == 70:   #End
                ptr = len(text)
            Elif c == 72:   #Home
                ptr = 0
            else:
                print("\nUnknown control character:", c)
                print("Press ctrl-c to quit.")
                continue
            if ptr < 0:
                ptr = 0
            if ptr > len(text):
                ptr = len(text)

            #Check if line changed
            if c in (53, 54, 65, 66):
                if multiline == False:
                    line_num = 0
                    continue
                if line_num < 0:
                    line_num = 0
                while line_num > len(lines) - 1:
                    lines.append('')
                text = list(lines[line_num])


        else:

            num = ord(c)
            if num in (13, 10): #Enter
                print()
                lines[line_num] = ''.join(text)
                if multiline:
                    return lines
                else:
                    return lines[0]
            Elif num == 127:        #Backspace
                if text:
                    text.pop(ptr-1)
                    ptr -=1
            Elif num == 3:          #Ctrl-C 
                sys.exit(1)
            else:
                text.insert(ptr, c)
                ptr += 1

#Main
if len(sys.argv) == 1:
    print("Usage: ./editfile <filename>")
    sys.exit(1)

f = open(sys.argv[1], 'r')
strings = f.read().split('\n')
f.close()
strings = text_editor(strings)

#Trim empty lines on end
for x in range(len(strings) -1,0, -1):
    if len(strings[x]):
        break
    else:
        strings.pop(-1)     


f = open(sys.argv[1], 'w')
f.write('\n'.join(strings)+'\n')
0
Benjamin

Essayez de lancer/bin/bash, je pense que ça va allouer pseudo tty

Essayez aussi: TERM=linux puis lancez nano

0
LeonidMew