Как исправить & ldquo; Ошибка открытия терминала: неизвестно. & Rdquo; на сервере Ubuntu?

Я искал и находил похожие вопросы, но ни один из них не был достаточно конкретным и не решил мою проблему. Примером может служить этот вопрос . Запуск удаленных скриптов / программ на основе терминала через ssh приводит к ошибке (Ошибка открытия терминала: неизвестно.) , которую я не использую ssh, поэтому -t не поможет.


Запустил webmin, работал в течение нескольких месяцев, и теперь я получаю эту ошибку.

Обычно, когда я набираю nano или vi в терминале, я получаю ошибку «Ошибка открытия терминала: неизвестно».

[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 ~]# 

Как исправить «Ошибка открытия терминала: неизвестно». в Ubuntu 16.04.3 LTS с запущенным webmin?

Новая информация:

  1. Когда я пытаюсь запустить vi или nano напрямую на сервере вместо использования webmin или ssh для удаленного доступа, это работает , Может ли это быть просто проблемой с webmin?
  2. Когда я проверяю переменные окружения, он говорит TERM=linux, что согласуется с моим другим сервером, на котором запущено все то же программное обеспечение.
2
задан 13 November 2018 в 03:34

4 ответа

Терминал Webmin еще не является интерактивным. На самом деле это - интерфейс командной строки.

Можно читать больше об этом, мы обсудили это довольно много.

Это находится в нашем todo для создания этого интерактивным.

1
ответ дан 2 December 2019 в 04:39

У меня была та же проблема, и она была решена следующим образом:

sudo apt-get install rxvt-unicode
0
ответ дан 20 November 2019 в 01:21

Попытайтесь выполнить/bin/bash, я думаю, что он выделит псевдо tty

Также попытка: TERM=linux затем выполненный нано

0
ответ дан 2 December 2019 в 04:39

Я встретился с этой проблемой, когда я пытался отредактировать файлы в initramfs. Это было единственным потоком, который я нашел, таким образом, вместо того, чтобы искать для других фиксируют, я записал сценарий Python для создания простого текстового редактора, который работает в initramfs (и другая функция плохие терминалы)

Это довольно просто, только отображает одну строку за один раз, таким образом, Вы нажимаете вверх и вниз для изменения строк и левый и правый, чтобы переместить курсор и войти для сохранения. Ничто не полагает, но это, кажется, работает хорошо на быстрые редактирования.

Это требует только readchar модуля: зернышко python3-m устанавливает 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
ответ дан 2 December 2019 в 04:39

Другие вопросы по тегам:

Похожие вопросы: