আমার টার্মিনালটি ইউনিকোডের কতটুকু সমর্থন করে তা সনাক্ত করুন, এমনকি স্ক্রিনের মাধ্যমেও


10

এখানে সমস্যাটি রয়েছে: আমি যদি জানতে পারি যে আমার টার্মিনালটি শালীন ইউনিকোডে সক্ষম কিনা বা না, কিছু অক্ষর ব্যবহার করতে বা না ব্যবহার করার জন্য, যেমন এক নজরে বর্ণ রয়েছে, কখনও কখনও রঙগুলি ব্যবহার করে এবং অন্যগুলি আন্ডারলাইন করে।

অনুপ্রেরণা উত্থাপিত হয় কারণ যে কোনও ধরণের ভার্চুয়াল টার্মিনালে আমি শালীন ফন্ট পাই, তবে আমি বুঝতে পারি যে বেসিক লিনাক্স কনসোলের 256 বা 512 যুগপত প্রতীকগুলির একটি অক্ষর সেট রয়েছে, সুতরাং আপনি সম্পূর্ণ ফন্ট সমর্থন আশা করতে পারবেন না।

প্রথমে আমি ভেবেছিলাম যে আমি ব্যবহার করতে পারি $TERMবা tty, তবে এখানে ধরা আছে: আমি বাইবুও ব্যবহার করছি, তাই $TERMসর্বদা "স্ক্রিন.লিনাক্স"। টিটিটির আউটপুটও খুব বেশি বলা হয় না: /dev/pts/<some number>"বাস্তব" এবং ভার্চুয়াল উভয় ক্ষেত্রেই।

$BYOBU_TTYকারণ এটি যেমন হতে পারে কোন সাহায্য, হয় হয় /dev/tty1এবং যখন সেশনে খোলা হয় Ctrl+ + Alt+ + F1অক্ষর দেখাবেন না কিন্তু যখন কিছু এক্স শব্দটি থেকে একই সেশনের সংযোজনের, তারা সঠিকভাবে দেন এবং এখনও $BYOBU_TTYপরিবর্তন করে না। তদ্ব্যতীত, আমি বাইওবু আছে কিনা তা অনুমান করেই এটি সনাক্ত করতে সক্ষম হতে চাই।

এছাড়াও, en_US.UTF-8 সমস্ত ক্ষেত্রে লোকাল শো

তবুও কোনওভাবে এক নজরে (কোনও নির্দিষ্ট সরঞ্জামের নাম দেওয়ার জন্য আমি এটি সনাক্ত করতে দেখছি), এমনকি বাইওবু-র অভ্যন্তরে, আমি বাইওবু সেশনে যাচ্ছি টার্মিনালের উপর নির্ভর করে বিভিন্ন আউটপুট ব্যবহার করে।

গুগল নিয়ে আমার সমস্যা হচ্ছে কারণ টার্মিনাল এবং টিটি খুব সাধারণ অনুসন্ধান শব্দ বলে মনে হচ্ছে। বেশিরভাগ ক্ষেত্রে আমি প্রস্তাবগুলিতে $TERMবা tty সমাধানে পৌঁছে যাই ।

উত্তর:


6

ঠিক আছে, প্রথমে আমি অনুমান করি যে আজকাল সমস্ত টার্মিনালগুলি আপনি যে অর্থে কথা বলছেন সেই অর্থে "ভার্চুয়াল" ... এমনকি যদি টার্মিনালটি একটি উদ্দীপনা সিরিয়াল বন্দরের অন্য প্রান্তে থাকে। মানে ভিটি -100 এস, উইস টার্মিনাল এবং অন্যান্য "ফিজিক্যাল", "রিয়েল" টার্মিনালগুলির দিনগুলি বেশ চলে গেছে!

একদিকে, আসুন আমরা আপনার টার্মিনালটিতে কী ধরণের ইউনিকোড সমর্থন করে তা সনাক্ত করতে চান তা যাক। আপনি পরীক্ষার অক্ষরগুলিতে লিখে এবং কী ঘটে তা দেখে এটি করতে পারেন। (আপনি লেখার পরে পরীক্ষার অক্ষরগুলি মুছে ফেলার চেষ্টা করতে পারেন, তবে ব্যবহারকারী এখনও তাদের সংক্ষিপ্ত দেখতে পাবে বা এগুলি মুছে ফেলতে পারে প্রথমে সঠিকভাবে কাজ করতে পারে না))

ধারণাটি হ'ল টার্মিনালটি আপনাকে তার কার্সার অবস্থান বলতে, একটি পরীক্ষার অক্ষর আউটপুট তৈরি করতে, টার্মিনালটিকে আবার তার অবস্থান বলতে বলুন এবং টার্মিনালের কার্সারটি কতদূর এগিয়েছে তা দেখতে দুটি অবস্থানের তুলনা করুন।

তার অবস্থান জন্য টার্মিনাল জিজ্ঞেস করা উচিত, দেখতে এখানে । মূলত:

echo -e "\033[6n"; read -d R foo; echo -en "\nCurrent position: "; echo $foo | cut -d \[ -f 2

"É" আউটপুট দেওয়ার চেষ্টা করুন। এই অক্ষরটি ইউটিএফ -8 এ 2 বাইট নেয় তবে স্ক্রিনে কেবল একটি কলামে প্রদর্শিত হয়। যদি আপনি সনাক্ত করেন যে আউটপুটটিং "é" কার্সারটিকে 2 পজিশনে স্থানান্তরিত করে, তবে টার্মিনালের কোনও ইউটিএফ -8 সমর্থন নেই এবং সম্ভবত কোনও ধরণের আবর্জনা রয়েছে। যদি কার্সারটি কিছুটা না সরে থাকে, তবে সম্ভবত টার্মিনালটি কেবলমাত্র ASCII। যদি এটি 1 অবস্থান দ্বারা সরানো হয়, তবে অভিনন্দন, এটি সম্ভবত ফরাসি শব্দগুলি প্রদর্শন করতে পারে।

"あ" আউটপুট দেওয়ার চেষ্টা করুন। এই অক্ষরটি ইউটিএফ -8 এ 3 বাইট নেয় তবে স্ক্রিনে কেবল দুটি কলামেই প্রদর্শিত হয়। যদি কার্সার 0 বা 3 দ্বারা চালিত হয় তবে খারাপ খবর, উপরের মতো। যদি এটি 1 দ্বারা সরানো হয়, তবে দেখে মনে হচ্ছে টার্মিনালটি ইউটিএফ -8 সমর্থন করে তবে প্রশস্ত অক্ষরগুলি (স্থির-প্রস্থের ফন্টগুলিতে) জানে না। যদি এটি 2 কলাম দ্বারা সরানো হয়, সমস্ত ভাল।

আমি নিশ্চিত যে অন্যান্য প্রোব অক্ষর রয়েছে যা আপনি নির্গত করতে পারেন যা দরকারী তথ্যের দিকে পরিচালিত করবে। আমি এমন কোনও সরঞ্জাম সম্পর্কে সচেতন নই যা এটি স্বয়ংক্রিয়ভাবে ঘটে।


1
স্যালাডা এই পরামর্শের জন্য আপনাকে ধন্যবাদ। তবে এটি কাজ করছে না: আমি সঠিকভাবে প্রতিবেদনিত অবস্থানগুলি দেখতে পাচ্ছি (1 ডলারে, 2 あ হিসাবে)। পার্থক্যটি হল একাদশের মধ্যে প্রকৃত চরিত্রগুলি দেখতে পাওয়া যায় যখন tty1 এ আমি একটি হীরা দেখি। সুতরাং আমি অনুমান করি যে টার্মিনালটি সত্যই utf-8 সমর্থন করে তবে ব্যবহার করা হরফের অক্ষরের অভাব রয়েছে।
ইলেক্স

আমি এখন কমান্ড showconsolefont দেখেছি। এটি একটি সম্ভাব্য সমাধান বলে মনে হয়েছিল (-v সহ এটি ফন্টটি 512-চরসেটের একটি হিসাবে রিপোর্ট করেছে)। দুঃখের বিষয়, এটি তখনই কাজ করে যখন বাইবু ব্যবহার না করে। এই শেষ ক্ষেত্রে, এটি "কনসোলকে উল্লেখ করে কোনও ফাইল বর্ণনাকারী পেতে পারেনি" এর সাথে ভুল হয়। যদি আমি স্পষ্টভাবে tty (-C বিকল্প) পাস করি তবে ত্রুটিটি "/ dev / pts / 37 খুলতে পারল না"
ইলেক্স

উপায় দ্বারা: sh
স্ট্রিপটি

3

ওপির আসল প্রশ্নটি: ইউনিকোডের মানগুলি লিনাক্স কনসোলকে সমর্থন করে এবং চলার সময় সেগুলি সনাক্ত করা যায় screen। নীতিগতভাবে, কনসোলের জন্য ইউনিকোড মানচিত্রটি উদ্ধার করে কেউ এটি করতে পারে।

kbdউৎস গাছ রয়েছে getunimap(এবং তার ম্যানুয়েল পৃষ্ঠা)। ম্যানুয়াল পৃষ্ঠাটি বলে

গেটুনিম্যাপ প্রোগ্রামটি পুরানো এবং অপ্রচলিত। এটি এখন সেটফন্টের অংশ

যা ঠিক সত্য নয়। মোটামুটি একই জিনিস setfontকরে এমন একটি বিকল্প রয়েছে :

   -ou file                                  
          Save previous Unicode map in file

পার্থক্য:

  • setfontgetunimapস্ট্যান্ডার্ড আউটপুট লেখার সময় একটি ফাইল লিখতে
  • getunimap একটি মন্তব্য হিসাবে ম্যাপ করা হবে এমন চরিত্রটি দেখায়।

উদাহরণ স্বরূপ:

0x0c4   U+2500  # ─ 
0x0c4   U+2501  # ━ 
0x0b3   U+2502  # │ 
0x0b3   U+2503  # ┃ 
0x0da   U+250c  # ┌ 
0x0da   U+250d  # ┍ 
0x0da   U+250e  # ┎ 
0x0da   U+250f  # ┏ 
0x0bf   U+2510  # ┐ 
0x0bf   U+2511  # ┑ 
0x0bf   U+2512  # ┒ 
0x0bf   U+2513  # ┓ 
0x0c0   U+2514  # └ 
0x0c0   U+2515  # ┕ 
0x0c0   U+2516  # ┖ 
0x0c0   U+2517  # ┗ 

বনাম

0xc4    U+2500
0xc4    U+2501
0xb3    U+2502
0xb3    U+2503
0xda    U+250c
0xda    U+250d
0xda    U+250e
0xda    U+250f
0xbf    U+2510
0xbf    U+2511
0xbf    U+2512
0xbf    U+2513
0xc0    U+2514
0xc0    U+2515
0xc0    U+2516
0xc0    U+2517

আপনি চালান তাহলে screen(অথবা উদাহরণস্বরূপ চলমান xtermএবং না কনসোলে), আপনি একটি অনুমতি ত্রুটি ঘটেছে, যা আপনি ব্যবহার এড়াতে পারেন পাবেন sudo

যদি কোন ফন্টটি লোড হয়েছিল তা যদি আমি জানতে পারি তবে আমি এটি (বিশেষ অনুমতি ছাড়াই) ব্যবহার করে পরীক্ষা করতে পারি psfgettable, উদাহরণস্বরূপ,

zcat /usr/share/consolefonts/Lat2-Fixed16.psf.gz | psfgettable -

এবং ম্যাপিং ডেটা দেখুন যা setfontফন্টটি লোড করতে ব্যবহার করবে (ইউনিকোড ম্যাপিংয়ের সাহায্যে):

#
# Character table extracted from font -
#
0x000   U+00a9
0x001   U+00ae
0x002   U+00dd
0x003   U+0104
0x004   U+2666 U+25c8 U+fffd
0x005   U+0105
0x006   U+0111
0x007   U+0150
0x008   U+0151
0x009   U+0162
0x00a   U+0164
0x00b   U+0170
0x00c   U+0171
0x00d   U+021a 
0x00e   U+02dd  
0x00f   U+2014 U+2015
0x010   U+2020
0x011   U+2021
0x012   U+2022 U+25cf
...

উভয়ই getunimapএবং setfontঅকার্যকর ডেটা দেয়, যখন psfgettableসাজানো প্রদর্শিত হয় (পাশাপাশি ইউনিকোডের মানগুলির জন্য একই গ্লাইফের সাথে মানচিত্রের জন্য লাইন সংমিশ্রণ করা হয়)। সুতরাং পার্থক্য আছে, কিন্তু তথ্য অ্যাক্সেসযোগ্য।

আরও পঠন (আপনি কেন showconsolefontএই সমস্যাটি সমাধান করতে ব্যবহার করতে পারবেন না তা চিত্রিত করে ):


থমাস ধন্যবাদ, আমার আসল প্রশ্নটি আমাকে সঠিক ট্র্যাকের উপরে রাখার জন্য। আমি আপনার তথ্য থেকে একটি সহজ ওয়ানলাইনার নেওয়ার চেষ্টা করব এবং ফলাফলগুলি নিয়ে ফিরে আসব। ব্যবহার sudoকরা আমার ব্যবহারের ক্ষেত্রে কোনও বাধা নয়।
ইলেক্স

এখন, এটি কৌতূহলী: setfontভার্চুয়াল টার্মিনালের মধ্যে কিছুই দেয় না (প্রদত্ত ফাইল তৈরি করে না ত্রুটির আউটপুট দেয় না), তবে প্রত্যাশার মতো প্রকৃত টার্মিনালগুলিতে কাজ করে। এটি উবুন্টু 16.04
্লেক্স

2

আমি একই জিনিসটি সম্পাদন করার চেষ্টা করছিলাম বলে আমি এই প্রশ্নটি পেরিয়ে এসেছি, তবে পর্দায় কোনও কিছু ফেলে রাখতে এবং এটির একটি ভেরিয়েবল সেট করতে চাইনি, তাই আমি নিম্নলিখিত উত্সটি একটি শেল স্ক্রিপ্টে রেখেছি:

function test_unicode {
  echo -ne "\xe2\x88\xb4\033[6n\033[1K\r"
  read -d R foo
  echo -ne "\033[1K\r"
  echo -e "${foo}" | cut -d \[ -f 2 | cut -d";" -f 2 | (
    read UNICODE
    [ $UNICODE -eq 2 ] && return 0
    [ $UNICODE -ne 2 ] && return 1
  )
}

test_unicode
RC=$?
export UNICODE_SUPPORT=`[ $RC -eq 0 ] && echo "Y" || echo "N"`
unset test_unicode

1
অবদানের জন্য ধন্যবাদ, জেফ। দুঃখজনকভাবে আমি বেসিক কনসোলে এমনকি সর্বদা Y পাই: এস
অলেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.