web-dev-qa-db-ja.com

「ターミナルを開く際のエラー:不明」の修正方法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. リモートでwebminまたはsshを使用する代わりに、サーバーでviまたはnanoを直接実行しようとすると、動作します。これはwebminの問題なのでしょうか?
  2. 環境変数を調べると、TERM=linuxであり、すべて同じソフトウェアを実行している他のサーバーと一致しています。
2
Stuperfied

Webminターミナルはまだインタラクティブではありません。実際には、コマンドラインインターフェイスです。

続きを読む それについて、私たちはそれについてかなり議論しました。

インタラクティブにするために todo にあります。

0
Ilia Rostovtsev

Initramfs内のファイルを編集しようとしたときに、この問題が発生しました。これは私が見つけた唯一のスレッドだったので、別の修正を探す代わりに、initramfs(およびその他の機能の低い端末)内で動作する単純なテキストエディターを作成するpythonスクリプトを作成しました

とてもシンプルで、一度に1行しか表示されないので、上下に押して行を変更し、左右に押してカーソルを移動し、入力して保存します。派手なものは何もありませんが、すばやく編集しても問題ないようです。

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

/ bin/bashを実行してみてください。疑似ttyを割り当てると思います

また、試してください:TERM=linuxその後、nanoを実行します

0
LeonidMew