如何修复 Ubuntu 服务器上的“打开终端错误:未知。”?

如何修复 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 ~]# 

如何修复在运行 webmin 的 Ubuntu 16.04.3 LTS 上出现“打开终端错误:未知。”?

新的信息:

  1. 当我尝试直接在服务器上运行 vi 或 nano 而不是使用 webmin 或 ssh 进行远程登录时,它可以正常工作。这可能是 webmin 的问题吗?
  2. 当我检查环境变量时,它说TERM=linux这与运行相同软件的其他服务器一致。

答案1

尝试运行 /bin/bash,我认为它将分配伪 tty

也可以尝试: TERM=linux 然后运行 ​​nano

答案2

Webmin 终端还不是交互式的。事实上,它是一个命令行界面。

你可以阅读更多关于它,我们讨论了很多。

它在我们的去做使其具有交互性。

答案3

我在尝试编辑 initramfs 中的文件时遇到了这个问题。这是我找到的唯一一个线程,因此我没有寻找其他修复方法,而是编写了一个 Python 脚本来制作一个可以在 initramfs 中(以及其他功能较差的终端)工作的简单文本编辑器

它非常简单,每次只显示一行,因此您可以按上下键更改行,按左右键移动光标,然后按 Enter 键保存。没什么特别的,但它似乎可以快速编辑。

它只需要 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')

答案4

我遇到了同样的问题,并通过以下方式解决:

sudo apt-get install rxvt-unicode

相关内容