同様の質問を検索して見つけましたが、具体的な質問や問題を解決できるものはありませんでした。たとえば、この質問 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を実行していますか?
新情報:
TERM=linux
であり、すべて同じソフトウェアを実行している他のサーバーと一致しています。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')
/ bin/bashを実行してみてください。疑似ttyを割り当てると思います
また、試してください:TERM=linux
その後、nanoを実行します