20200516のLinuxに関する記事は13件です。

Vimライトユーザーのための「Vim以外でVimする」

この記事を見たらできるようになること

  • たぶんLinux全般
  • どんなアプリケーション上でも、変換キー(任意のキーに変更可能)を押している間、Vimのノーマルモードを擬似的に再現できるようになる
  • Vimだとホームポジションから遠いキーバインドはEmacsのものを採用しています

この記事の対象者

中途半端にVimの世界に足を踏み入れてしまい、以下のような状況の方

  • Vimのキーバインドがないとイライラしちゃう
  • でも、常にVimを起動させておいて、Vimで書いて他のアプリにヤンクする、というほどの中毒者ではない
  • Vimで開発環境を完璧にするのも面倒でついついIDEを使っちゃう
    • vscodeでvimバインドを使うと、vscode本体のキーバインドと食い合ってムキーってなっちゃう

とりあえずやってみたい人のための奴

このレポジトリを適当な場所にクローンする

【迷ったらこれ】
ターミナル上で以下を入力

$ cd && git clone https://github.com/mojamozya/allapps-vimlike.git

②bashrcとかに以下を追記

【迷ったらこれ】

$ echo 'xkbcomp -I$HOME/allapps-vimlike/.xkb ~/allapps-vimlike/.xkb/keymap/mykbd $DISPLAY 2> /dev/null' >> ~/.bashrc

とりあえずこれでレポジトリのSimply mapped (Mapped with XKB)って書いてる奴はできるようになるよ

起動時にターミナル立ち上げる設定にしてない人は、起動させる度にターミナル立ち上げてください

③Autokeyをインストールする

$ sudo apt install autokey-gtk

Gnomeじゃない人はautokey-qtとかかも、しらんけど

④autokeyの画面を開く

$ autokey

⑤ダウンロードしたレポジトリをAutokeyで有効にする

Autokeyの仕様上、ここがちょっとややこしいです。
とりあえずautokeyにデフォルトで入っているフォルダとかフレーズとかは全部削除しちゃって構いません。

Autokeyの画面にて、メニューバーのFile -> New -> Folder を選んだ後、
Use Default を選択し、generalというフォルダをデフォルトの場所に作ってください。
~/.config/autokey/dataにgeneralというフォルダができている筈なので、
そこにallapps-vimlike/.autokey/general/vimlikeのシンボリックリンクを作ります。

【迷ったらこれ】
Autokeyの画面から上述の通りにgeneralというフォルダをデフォルトの場所に作ったあと、

$ ln -s ~/allapps-vimlike/.autokey/general/vimlike ~/.config/autokey/data/general

⑥動作チェックして問題なければ、autokeyを起動時に立ち上がるようにする

ubuntuとかならsessionに追加すればいいだけですが、
他のディストリビューションの人は自分で調べてみてください。

bashrcにautokeyとか追加してもいいかもしれませんが、
ターミナルが立ち上がる度にautokeyが再起動されるのは、ちょっとダルいかも

使い方

  • Autokeyを起動させた状態
  • xkbcompでxkbの設定ファイルを読み込んだ後

なら使えます。

変換キーがをHyperキーにマッピングしているので、
キーマッピングはHyper = 変換 と読んでください。

変換キー以外をHyperにする方法はまあたぶんxkbまわりのソースの雰囲気見れば分かるよ。
需要があれば具体的な方法も書きますが地味に面倒なので割愛します。

キーマップ紹介と補足

(単純なキーマップはレポジトリにも書いてあります)

シンプルなやつ

Vimと同じくカーソルはhjklです。
つまり変換キーとhjklを同時に押せば、それぞれカーソルキーになります。

EscはCtrl+[と、小指が届かなかったとき対策のCtrl+@にも振っています。
(僕はよく[と@を押し間違えます)

ポイントとしては、;:にそれぞれBackSpaceとDeleteを振っているところでしょうか。
元来のVimほど削除の小回りが聞くわけではないので、
;を押すことで削除をすることによって、Vimっぽくはないものの普通に便利なショートカットにしています。
(ただ小指で;を連打すると疲れるので、iあたりをBackSpaceにするのもいいかもしれませんね。)

:はまあそのノリで、「Backspaceの右側を押したら、カーソルの右側が消えるよ」という感覚でしょうか。
Vimな気分が強いときはxを押します。どっちでもいいと思います。

a と e をEmacs風のキーバインドにしているのも特徴です。
変換キーと同時押しする都合上、
^を押すときにも多少のストレスがかかり、
Shift + $ を押すときには、
喫煙者が3時間タバコを吸えていないときぐらいストレスがかかります。

なので、ここにはEmacのキーバインドを採用してみました。
* aはアルファベットの先頭だから行頭、
* eはend of line のe
とでも覚えてみるのもいいかもしれませんね。

Pushed keys Mapped Keys Like Usage
Hyper + h Vim Cursor key
Hyper + j Vim Cursor key
Hyper + k Vim Cursor key
Hyper + l Vim Cursor key
Hyper + ; BackSpace Original Backspace
Hyper + x BackSpace Original Backspace
Hyper + : Delete Original Delete
Hyper + a Home Emacs Move cursor to the head of line
Hyper + e End Emacs Move cursor to the end of line
Hyper + m Enter Emacs Enter key
Hyper + Ctrl + [ Esc Vim Esc (Mapped with AutoKey)
Hyper + Ctrl + @ Esc Vim Esc (Mapped with AutoKey)

カーソルをマクロっぽい感じで動かすやつ

ここからはちょっとだけ複雑なことをしています。
{Ctrl + カーソルキーでなんかいい感じにカーソルを移動させてくれるのって、
IMEの機能?OSの機能?
そんなことは知りませんが、ちょっとだけVimの
eとかb`っぽい挙動になってくれるのです。

でもeをEmacsバインドで使っちゃってるので、
挙動がeに似ているwCtrl + →を割り当ててみました。

Ctrl + →はどっちかというとeに近いんだけどね。
でも所詮eとも細かいところは違うから、どっちだっていいや。

同様にbCtrl + ←を割り当てています。

あとは、oとかね。
Endキーで行末に移動してからEnterキーを押すマクロを設定することで、
擬似的にVimのoを再現しています。

Shift + oの再現の仕方は難しい。
IDEのインデントをいい感じにしたいならこのまま。
一番上の行にいるときにも作動させたいなら、Home -> Enter -> ↑かな?

Pushed keys Mapped Keys Like Usage
Hyper + Shift + b Ctrl + ← Vim Move cursor to the head of word
Hyper + Shift + w Ctrl + Shift + → Vim Secelt the range from current cursor to the head of word
Hyper + w Ctrl + → Vim Move cursor to the end of word
Hyper + Shift + w Ctrl + Shift + → Vim Secelt the range from current cursor to the end of word
Hyper + o End -> Enter Vim Make a line below current cursor
Hyper + Shift + o ↑ -> End -> Enter Vim Make a line above current cursor

Shortcut (Mapped with Autokey)

あとはショートカットですね。
個人的には、Ctrl + xCtrl + cCtrl + vが隣にあるのが
とても気に食わないんですよね。
コピーしようと思ったらペーストしてもうたやんけ!しばくぞ!
とよくなっちゃいます。
ということで、dやらyやらpやらに振っています。

ddyyは再現するのが難しかったので、Shift + dShift + yだけ再現しました。
(Shift + yは標準にはなかったっけ?勝手に.vimrcに追加してるだけかも)

そうすると、aで行頭に戻ってShift + d (y)で削除(ヤンク)できるのでまあいいかと。
EmacsでいうCtrl + a -> Ctrl + k的な? Emacs詳しくないから知らんけど。

あとCtrl + zは押すときに指が窮屈になるので好きくありません。
Ctrl + Shift + zでRedoも、押し間違えのリスクがあって好きくありません。
なのでuCtrl * rで再現しました。

Pushed keys Mapped Keys Like Usage
Hyper + u Ctrl + z Vim Undo
Hyper + Ctrl + r Ctrl + Shift + z Vim Redo
Hyper + y Ctrl + c Vim Copy
Hyper + Shift + y Ctrl + End -> Ctrl + c -> → Vim Copy the range from current cursor to the end of line
Hyper + d Ctrl + x Vim Cut
Hyper + Shift + d Ctrl + Shift + End -> Ctrl + x Vim Cut the range from current cursor to the end of line
Hyper + p Ctrl + v Vim Paste

vscode使いへ

vscodeで使うときはKeyboard: DispatchをkeyCodeにするといいと思うよ
こうするとvscodeの一部のショートカットの挙動がびみょくなるかもだから、
そのときはvscodeのkeyboard shortcutsをいじったら治るよ

その他

パソコンが物故割れても責任は取れませんTT
なにか質問があればどうぞ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

vlocks for Bare-Metal Mutual Exclusion(1/2)

https://www.kernel.org/doc/html/latest/arm/vlocks.html

vlocks for Bare-Metal Mutual Exclusion

Voting Locks, or “vlocks” provide a simple low-level mutual exclusion mechanism, with reasonable but minimal requirements on the memory system.

Voting Locks あるいは "vlock" は、シンプルで低レベルのmutal exclusion mechanismを実現するものである。これは、メモリシステムへの最小の要求だけが必要とされる、リーズナブルです。

These are intended to be used to coordinate critical activity among CPUs which are otherwise non-coherent, in situations where the hardware provides no other mechanism to support this and ordinary spinlocks cannot be used.

これは、一貫性の無いCPU間でのクリティカルなアクティビティの調整に利用する事を目的としています。ハードウェアがこれをサポートする他のメカニズムを提供せず、通常のスピンロックが利用できない状況で利用できます。

vlocks make use of the atomicity provided by the memory system for writes to a single memory location. To arbitrate, every CPU “votes for itself”, by storing a unique number to a common memory location. The final value seen in that memory location when all the votes have been cast identifies the winner.

vlockは、メモリシステムによって提供される原子性(atomicity)を利用して、single memory locationへ書き込みします。調停するために、全てのCPUでは"自分に投票し"、共有メモリ市にユニークな数値を書き込みます。すべての投票が行われたとき、memory locationに表示される最終の値によって、勝者が識別されます。

In order to make sure that the election produces an unambiguous result in finite time, a CPU will only enter the election in the first place if no winner has been chosen and the election does not appear to have started yet.

投票が有限の時間で、確実に結果を生み出すために、勝者が決定されておらず、投票がまだ始まっていない場合のみ、CPUは投票を行います。

Algorithm

The easiest way to explain the vlocks algorithm is with some pseudo-code:

vlock algorithmを例示する簡単な方法は、疑似コードを利用する事である。

int currently_voting[NR_CPUS] = { 0, };
int last_vote = -1; /* no votes yet */

bool vlock_trylock(int this_cpu)
{
        /* signal our desire to vote */
        /* 投票をしたい気持ちをsignalする */
        currently_voting[this_cpu] = 1;
        if (last_vote != -1) {
                /* someone already volunteered himself */
                /* 誰かすでに志願している */
                currently_voting[this_cpu] = 0;
                return false; /* not ourself */
                              /* それは自分ではない */
        }

        /* let's suggest ourself */
        /* 自分自身を提案する */
        last_vote = this_cpu;
        currently_voting[this_cpu] = 0;

        /* then wait until everyone else is done voting */
        /* それ以外の全員が投票を完了するまで待機 */
        for_each_cpu(i) {
                while (currently_voting[i] != 0)
                        /* wait */;
        }

        /* result */
        /* 結果 */
        if (last_vote == this_cpu)
                return true; /* we won */
                             /* 勝利 */
        return false;
}

bool vlock_unlock(void)
{
        last_vote = -1;
}

The currently_voting[] array provides a way for the CPUs to determine whether an election is in progress, and plays a role analogous to the “entering” array in Lamport’s bakery algorithm [1].

current_voting []配列は、CPUが投票が進行中であるかどうかを判断する方法を提供し、Lamportのbakery algorithm の「entering」配列と同様の役割を果たします[1]。

However, once the election has started, the underlying memory system atomicity is used to pick the winner. This avoids the need for a static priority rule to act as a tie-breaker, or any counters which could overflow.

しkし、一度投票が開始すると、根底にあるメモリシステムの原始性を用いて、勝者の選出に使われます。これにより、tie-breakerとして機能する静的優先順位のルール、あるいは、オーバーフローする可能性のあるカウンターが必要なくなります。

As long as the last_vote variable is globally visible to all CPUs, it will contain only one value that won’t change once every CPU has cleared its currently_voting flag.

last_vote変数がすべてのCPUにglobalに可視である限り、すべてのCPUがcurrent_voting flagをクリアするまで変更されない1つの値のみが含まれます。

Features and limitations

・vlocks are not intended to be fair. In the contended case, it is the last CPU which attempts to get the lock which will be most likely to win.

vlocks are therefore best suited to situations where it is necessary to pick a unique winner, but it does not matter which CPU actually wins.

  • vlockは平等であるように糸されていません。競合するケースでは、"最後の"CPUが、ロックを取得しようとする中で最も勝つ可能性が高くなります。しかたがって、vlockは唯一の勝者を決定する必要がある状況には最も適していますが、実際にどのCPUが勝者となるのかは気にしていません。

・Like other similar mechanisms, vlocks will not scale well to a large number of CPUs.

vlocks can be cascaded in a voting hierarchy to permit better scaling if necessary, as in the following hypothetical example for 4096 CPUs:

vlocksは、必要に応じてより良いscalingするために、投票階層をカスケード接続できます。例えば、4096 CPUを潜在的に有するようなケース。


もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる(はずの認識)。

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

eclipse.iniに-vmを指定する方法

Eclipseを実行するJVMをeclipse.iniに-vmオプションで指定する。
が、CentOSでOpenJDK11のjavaw.exeがなかった、ので調べてみた。

実行ファイルのパスを指定する方法

これまでこの方法でしか指定したことがなかった、しかもjavawがWindows用って知らなかった。

javawはどうもWindowsのために用意されたコマンドみたいですね。Windows環境向けの記事でjavaw.exeを使う解説があった場合、Linux/Mac環境では素直にjavaコマンドに置き換えましょう。
Linux/Mac に javaw コマンドがない…だと…

; Windowsの場合
-vm
JAVA_HOME¥bin¥javaw.exe

; Linuxの場合(CentOS)
-vm
JAVA_HOME/bin/java

ディレクトリパスを指定する方法

; Windowsの場合
-vm
JAVA_HOME\bin

; Linuxの場合(CentOS)
-vm
JAVA_HOME/bin

共有ライブラリのパスを指定する方法

Java11より前だと若干パスが違うようだ。
OpenJDK 11 - Change in libjvm.so default location ? · Issue #137 · LeeKamentsky/python-javabridge

; Windowsの場合
-vm
JAVA_HOME\bin\client\jvm.dll
; または
JAVA_HOME\bin\server\jvm.dll

; Linuxの場合(CentOS)
-vm
JAVA_HOME/bin/libjvm.so
; または
JAVA_HOME/lib/server/libjvm.so
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dotenvって何?

これ何

機密情報を扱う時にどうするんだっけ?みたいなのをまとめる。

まとめ

  • 機密情報はそのままコードに保存しちゃダメ
  • .env にまとめるがgitに保存する場合は機密情報を除いて .env.sample にすることが多い
  • 多くの言語で .env を扱うパッケージが存在する

envファイルとは

アプリケーションの中で「DBの情報」や「サーバーの情報」「外部APIの連携情報」など第三者に見せたくない機密情報が存在する。機密情報は、コードとは別に環境変数として情報を保存する。

ローカルでは、複数プロジェクトが存在し、プロジェクトごとに異なる環境変数を取り扱いたい。また、新しく加わるメンバーのためにも環境変数の設定ファイルをまとめておきたい。

そのため、 .envファイル として、機密情報をまとめたファイルを作成し、情報を管理する。
.envファイル はgitにそのまま載せると機密情報がgitに乗ってしまうため、 .gitignore.envファイル を追加し、 .env.sample というサンプルのファイルを置くことが多い

環境変数について

環境変数の追加・閲覧・削除の方法を簡単にまとめる。

# 環境変数の設定
$ export GERU="mew" # GERUという名前の環境変数に「mew」という値を入れる
# 環境変数の確認
$ echo $GERU # GERUという名前の環境変数の中身を見る
mew
# 設定されている環境変数の確認
$ printenv # 設定されている環境変数を全て確認する
...
GERU=mew
...
# 設定されている環境変数を削除する
$ unset GERU # 設定されている環境変数の削除
$ echo $GERU # 設定が削除されたので、出力しても表示されない

.envについて

いろんな言語で.envで環境変数を取り扱うパッケージが開発され、利用されています。

Ruby[dotenv]

Javascript[dotenv]

Python[python-dotenv]

まとめ

  • 機密情報はそのままコードに保存しちゃダメ
  • .env にまとめるがgitに保存する場合は機密情報を除いて .env.sample にすることが多い
  • 多くの言語で .env を扱うパッケージが存在する

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ネットワーク(主にLinux)メモ

ネットワークに関してLinux(ubuntu18.04)で勉強した際に、わからなかった箇所を備忘録
としてここに残しておきます。

netns(network namespace)

  • PC常に独立したネットワークを構築できる
    例: sudo ip netns add helloworld でhellowroldというネットワークを作る

    • sudo ip netns exec helloworld bash でhelloworld上でbashを起動。exitでぬける
    • sudo ip netns delete helloworldでhelloworldを削除。
  • network namespace同士をつなげるには以下のようにvethを使う

    • 例: sudo ip link add ns1-veth0 type veth peer name ns2-veth0 (ns1とns2をつなぐ)
    • 加えて
      • sudo ip link set ns1-veth0 netns ns1
      • sudo ip link set ns2-veth0 netns ns2
        をつけることでnetwork namespaceに追加できる ただし、これではip addressがないので以下のようにつける
      • sudo ip netns exec ns1 ip address add 192.0.2.1/24 dev ns1-veth0
      • sudo ip netns exec ns2 ip address add 192.0.2.2/24 dev ns2-veth0

    また、ネットワークのステートをdownからupにする必要もあるため、以下のように行う
    - sudo ip netns exec ns1 ip link set ns1-veth0 up
    - sudo ip netns exec ns2 ip link set ns2-veth0 up

  • 同一ネットワーク以外の場所へ通信する際は、デフォルトルートを設定する

    • ルータへのルートをデフォルトルートとすることで、ルーティングテーブルにないipアドレスへのリクエストをルータへ送ることができる
    • それでもできない場合は以下の設定が足りない
      • sudo ip netns exec (ルータ名) sysctl net.ipv4.ip_forward=1
        これはipv4のルータとして動くことができるかを示したもの
  • ルータ同士の通信でも、ルーティングテーブルは必要。そのため、ローカルなものはコマンド送信でルーティングテーブルを追加するスタティックルーティングでテーブルに追加。グローバルなものは動的ルーティング(BGP, OSPFなどといったプロトコルが使われる)を行う

ブリッジ

  • スイッチングハブと同義

UDP

  • ポートとは、マンションにおける部屋のようなもの。16bitの数値になる。

    • ポートの値はアプリケーションで決まっている。
    • 0~1023 : システムポート
    • 1024~49151 : ユーザポート、or レジスタポート
    • 49152~65535 : ダイナミックポート or プライベートポート
  • nc -ulnv ip (address) (port番号)
    でサーバとして起動。
    「-u:UDP通信」
    「-l:サーバとして動作」
    「-n:ipアドレスをDNSで名前解決させないようにする」
    「-v:コマンドの表示を詳細にするため」

  • nc -u ip (address) (port番号)
    でクライアントとして起動

tcp

  • 接続時は、3WAYハンドシェイクで接続確認を行う

    • ヘッダにある、6bitのコントロールビットでSYN,ACKなどのフラグを確認する
    • SYN : このbitがたったパケットを送り合うことでお互いにシーケンス番号を同期する。つまり、データの順番を管理する
    • ACK : 該当のbitが立っていることでACKとして認識する
  • 文字列を送る際はコントロールビットのフラグにPが含まれる

アプリケーション層

HTTP

  • 使用するポートナンバーはTCPの80

    • echo -en "GET / HTTP/1.0¥r¥n¥r¥n" | nc 127.0.0.1 80
    • curl -X GET -D - http://127.0.0.1

のような形でhttpリクエストを発行できる

  • また、サーバも、python3があれば
    • sudo python3 -m http.server -b 127.0.0.1 80

のようにしてサーバを起動できる。このとき、アクセス時に表示されるページはカレントディレクトリ上のindex.htmlとなる

DNS

  • DNSサーバーは外部のものを使うことがよくある。例えばgoogleのもの(8.8.8.8)など

    • どのDNSを用いるかは、PC上のリゾルバが決定する
  • ローカル上では、linuxの場合、「/etc/hosts」ファイル内で、DNS解決用のリストが記載してある

  • 使用するポートはUDPの53番ポート

DHCP

  • 役割としては

    • ip アドレスの割り振り
    • ルーティングテーブルの作成
    • 名前解決に利用するネームサーバの指定 を行う
  • 通信方式はサーバ・クライアント方式。主にDHCPサーバの機能をルータが担うことが多い

  • 使用するポートはUDPの67番ポート

NAT(NAPT)

  • ローカルアドレスとグローバルアドレスの変換を行う。

  • iptablesコマンドを用いてlinuxでは使用

pythonでのソケットプログラミング

socket() : ソケットでどんな通信を行うかを指定する
bind() : 接続を待ち受けるIPアドレスとポート番号を指定する
listen() : 接続の待ち受けを開始する
accept() : 接続したクライアントを処理する(この関数内で接続待ちを行う)
send()/recv() : バイト列を受信する
close() : 接続を閉じる

その他

  • 127.0.0.1 : ループバックアドレス。自身とネットワークの通信を行いたいときに用いる

  • tcpdump : コンピュータ上を流れるtcp/ipのデータをキャプチャ(sniffing)する

  • ルーティングテーブルがないと、外部への通信はできない。

    • ルーティングテーブルを見るには、「ip route show」
    • 外部への通信を行うには、デフォルトルートが必要
    • デフォルトルートとは、他の宛先に一致しないときに使われるルーティングエントリ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

suコマンドのハイフン(-)の曖昧なところを今すぐ解消しよう!!

まずはおさらいから

Linuxで現在のユーザーから別のユーザーに切り替えるときのコマンドが su です。
ちなみに、これって substitute user の略なんですって。(参考: su (Unix) - Wikipedia
substituteは「代わりに使う」という意味です。ポケモンのみがわりという技も英語でsubstituteといいます。
switch user とか super user の略ではないんですね。

コマンドの使い方

$ su [-] <user name>

基本的なコマンドの使い方は上の通りで、ユーザー名を指定しないとsuper user(root)になりますね。

ハイフンって何の意味があるの?

su コマンドの - には環境変数を引き継ぐという意味があります。
つまり、- をつけると初めからそのユーザーでログインしたのと同じことになります。

  • $ su - anotherUser
    • 環境変数を引き継ぐ
    • 最初からanotherUserでログインしたのと同じ状況になる
  • $ su anotherUser
    • 環境変数を引き継がない

さいごに

たまにはこんなあっさりした投稿もいいかなw

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntuで絵文字 fonts-noto-color-emoji インストール後に一部のアプリで文字がおかしくなる

Ubuntu 20.04で確認。

Ubuntuで絵文字を表示するには、fonts-noto-color-emoji パッケージをインストールする。
インストールするだけで、Chromeなどでも絵文字が適用されるようになる。

sudo apt install fonts-noto-color-emoji

しかし、それ以降、数字が黒文字の全角になったり、妙なSerif(明朝体)になったりした。

2020-05-16_13-27.png

2020-05-16_13-28.png

何の文字があたっているかfont-managerで調べていると、Noto Color Emojiが該当した。

2020-05-16_13-33.png

フォントの優先順位を確認するfc-matchを使うと、Noto Color Emojiが最初に出てくるようになった。

fc-match -a | head -5

NotoColorEmoji.ttf: "Noto Color Emoji" "Regular"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSansCondensed.ttf: "DejaVu Sans" "Condensed"
DejaVuSans-ExtraLight.ttf: "DejaVu Sans" "ExtraLight"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"

おそらく、Noto Color Emojiのインストールでこれが優先順位の先頭になり、一部最も上位のフォントしか使わないアプリケーションで、このフォントだけが使われるようになって、このようなことになっていると思われる。

フォントの優先順位を操作する ~/.config/fontconfig/fonts.conf をみてみると、Noto Color Emojを先頭に挿入する操作が書かれていた。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match>
  <test name="family">
   <string>sans-serif</string>
  </test>
  <edit mode="prepend" binding="strong" name="family">
   <string>Noto Color Emoji</string>
  </edit>
 </match>
 <match>
  <test name="family">
   <string>serif</string>
  </test>
  <edit mode="prepend" binding="strong" name="family">
   <string>Noto Color Emoji</string>
  </edit>
 </match>

これに、Noto Sans/Serif CJK JPに変更した。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match>
  <test name="family">
   <string>sans-serif</string>
  </test>
  <edit mode="prepend" binding="strong" name="family">
   <string>Noto Sans CJK JP</string>
  </edit>
 </match>
 <match>
  <test name="family">
   <string>serif</string>
  </test>
  <edit mode="prepend" binding="strong" name="family">
   <string>Noto Serif CJK JP</string>
  </edit>
 </match>

確認すると、順位が下がっていた。

fc-match -a | head -10

NotoSansCJK-Regular.ttc: "Noto Sans CJK JP" "Regular"
NotoSansCJK-Medium.ttc: "Noto Sans CJK JP" "Medium"
NotoSansCJK-DemiLight.ttc: "Noto Sans CJK JP" "DemiLight"
NotoSansCJK-Light.ttc: "Noto Sans CJK JP" "Light"
NotoSansCJK-Thin.ttc: "Noto Sans CJK JP" "Thin"
NotoSansCJK-Bold.ttc: "Noto Sans CJK JP" "Bold"
NotoSansCJK-Black.ttc: "Noto Sans CJK JP" "Black"
NotoColorEmoji.ttf: "Noto Color Emoji" "Regular"

引き続きChromeなどでは絵文字が利用でき、加えてNoto Color Emojiが不必要にあたっていたアプリでも正常に表示されるようになった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

え?君のChrostiniそんなもん?だっさwww - Part1 日本語化

免責事項

当記事は以下の環境にて検証済みであり、端末やOSのバージョン(ChromeOS, Linux)によっては必ずしも成功するとは限りません。また、記事の内容を実行したことによって生じた損害については一切の責任は負いませんのでご了承ください。
あと、画像多めなので少し重いかもです。

環境
Lenovo Chromebook S330
CPU: 4xMediaTek MT8173C@2.10GHz(aarch64)
RAM: LPDDR3 4GB
OS: ChromeOS 81.0.4044.141(2020/5/16(Sat)時点最新版)

Linuxは下の画像のとおりです。
Screenshot 2020-05-16 at 10.15.33.png

Chrostiniナニソレオイシイノ

美味しいです。とっても。食べられません。でも、すっごい良い機能です。ChromebookでLinuxが使えるんですよ?裏蓋開けたりブートローダーいじったりしなくても。それに、仮想環境の中で動くからもしやらかしても最悪再インストールしなおせばいいだけだし、ChromeOS側の緩急に与える影響もすごく小さい。
この記事では、「Chrostini使いたいけどどうすればいいかよくわからない...。」というような迷える子羊たちのために書かれた記事ですので、玄人諸君にはあまり合わないかもしれません。超絶丁寧に説明するので最後まで読んでいってね。あぁ、読み方は「くろすてぃーに」だと思います。

目標

↓こんな感じになります。かっこいいでしょ。↓(ユーザー名が違うのは開発用じゃなくて僕が普段使ってる環境で撮ったスクショだからだよ)
Screenshot 2020-05-16 at 10.30.15.png
今回は、とりあえず日本語化をしてGUIソフトで日本語入力できるようにするところまでやります。

Linux ON!

さぁ、Linuxを使えるようにしましょう。最新版のChromeOSなら特別なことは不要ですが、少しいじります(どっちなんだよ)
デフォルトでは、Linuxよインストールしたときのユーザー名はChromeOSで使われいるGoogleIDになります。

ユーザー名の例
Konohage@example.com だったらユーザー名は Konohage
Horiemon@example.com だったらユーザー名は Horiemon

こんな感じ。嫌だね。どうしましょうか。
Chromeでこのページを開いて、一番上の'Allow picking your Chrostini username'をDefaultからEnabledにしてください。すると、下の方に'Restart'が出てくるので、これを押して再起動してください。
Screenshot 2020-05-16 at 09.31.19.png
これで、Chrostiniのユーザー名を設定できるようになりました。
じゃあ、インストールしましょう。
設定を開いて。。。「Linux(ベータ版)」を押して。。。
Screenshot 2020-05-16 at 09.32.49.png
Linuxをオンにする!!!
Screenshot 2020-05-16 at 09.42.50.png
と、こんな漢字の画面が出てきます。ユーザー名を選択しましょう。ここでタイプミスとか変な名前にすると、99%変更不可能なので、気をつけましょう。僕は一回やりました。
で、インストール!!!します。
Screenshot 2020-05-16 at 09.33.22.png
結構時間かかるので首をろくろっ首のようにして待ちましょう。まあ、5分くらいですかね。

待ってる間の暇つぶしには、僕はゲームをやるかな...?Krunkerはブラウザでできて、楽しいゾ。FPS楽しい!(゚∀゚)アヒャ

インストールが終わると、こうなります。
Screenshot 2020-05-16 at 09.49.30.png
Linuxのプロンプトですね。おめでとうございます!Linuxが動きました!

更新タイム

さあ、Linuxが動きました。嬉しい!!!けど、ソフトを更新しないとダメです!やっていきましょう。

更新
$ sudo apt update -y && sudo apt upgrade -y

このコマンドをCtrl+CでコピーしてCtrl+Shift+V1で貼り付けて、Enter!!
Screenshot 2020-05-16 at 09.54.43.png
わーーーーーーっていろいろ出てくるけど、基本待つだけ。待ちませう。で、上のスクショのようにプロンプトが帰ってきたら2OK。更新は終了。

待ってる間にコマンドの解説。

解説
$ sudo apt update -y && sudo apt upgrade -y
1. sudo: 管理者権限でコマンドを実行するためのコマンド。システムに変更を与えるコマンドは基本的にはこれが必要。「すどー」「すど」「すどぅ」が読み方かな。人によって違ったりするよ。
2. apt: パッケージ(ソフトウェア)を管理するコマンド。「あぷと」であってるはず。~~どこかの塾と同じです~~
3. apt update: パッケージのリストを更新するコマンド。
4. apt upgrade: インストールされているパッケージをすべて更新するコマンド。
5. -y: aptコマンドにつけているオプション。これをつけなかったら、インストール時に色々聞かれてはいいいえで答えないといけなくなって面倒だからつけてる。
6. &&: 2つのコマンドを同時に実行できるやつ。

更新は終わりましたか?じゃあ次に移りましょう。

パスワードを設定しとこう

デフォルトではユーザーにはパスワードが設定されていません。すると、次回のところで困るので設定しておきましょう。

パスワード変更
$ sudo passwd $USERNAME

Screenshot 2020-05-16 at 09.55.28.png
必ずsudoをつけてください。つけないと不可能です。(現在のパスワードを求められるが設定されていないため)

日本語化

英語でいいんだというツワモノはここはやる必要ありません。()
まずはこれを実行して言語を変更しましょう。

dpkg-reconfigure
$ sudo dpkg-reconfigure locale

すると、こんな感じになります。
Screenshot 2020-05-16 at 09.55.57.png
矢印キーで下へ行って、'en_US.UTF-8'を探して、見つけたらスペースキーを押して'*'を消しましょう。
Screenshot 2020-05-16 at 09.56.37.png
そして、'ja_JP.UTF-8'を探して、スペースキーで'*'をつけてください。
Screenshot 2020-05-16 at 09.57.10.png
そうしたら、enterキーを押して
Screenshot 2020-05-16 at 09.57.16.png
'ja_JP.UTF-8'のところでもう一回enter
Screenshot 2020-05-16 at 09.57.25.png
こんな感じになったらOK。プロンプトで$ clearを実行して画面をお掃除しましょう。
次に、日本語入力をできるようにしましょう。

fcitxのインストール
$ sudo apt install fcitx fcitx-mozc nano -y

$ apt installはパッケージをインストールするためのコマンドです。sudoをつけてください。結構時間がかかるので肘で顎を触れるか試して待ちましょう。nanoはテキストエディタです。このあと使うので一緒に入れてください。
Screenshot 2020-05-16 at 10.00.08.png
わーーーーーーって出てきて、プロンプトが帰ってきたらOK。終わり。
で、設定をいじります。

$ sudo nano /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf

で、開いたファイルの一番下に矢印キーで移動して、下の四行を追加してください。

cros-garcon-override.conf
Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"
Environment="GDK_BACKEND=x11"

できたら、Ctrl+Sで保存してCtrl+Xで終了です。
次に、設定ファイルをホームディレクトリに追加します。これがないと日本語入力のやつが自動起動しません。

$ nano ~/.sommelierrc

で、開いたファイルに

.sommelierrc
/usr/bin/fcitx-autostart

を追加してください。というか中身はもともと空です。で、保存からの終了。
そうしたら、Linuxコンテナを再起動してください。
Screenshot 2020-05-16 at 10.07.30.png
ターミナルのアイコンを右クリックして「Linux(ベータ版)を終了」をクリック。しばらく待ってからもう一度ターミナルを開けばOKです。
で、仕上げです。

$ fcitx-configtool

でfcitxの設定を開いてください。
Screenshot 2020-05-16 at 10.08.49.png
そうしたら、キーボードを自分のものにあわせて下の+ボタンや-ボタンで編集してください。キーボードが一番上に、その下にMozcがあればOK。
で、アドオンのタブを開いて、「Advanced」(拡張)にチェックを入れて、検索欄に「xim」と入れてください。
Screenshot 2020-05-16 at 10.09.09.png
一つだけ検索結果に出てくるのでクリック。
Screenshot 2020-05-16 at 10.09.13.png
「XIMでOn the spotスタイルを使う」にチェックマークを入れてください。そして、閉じてOKです。(スクショになにか写り込んでるのは気にしないで)

中の人から

とりあえず、日本語化はこれで終了です。次回はかっこよく、より使いやすくしていきます。
別にかっこよくなくてもいいやと言う人はここで終わっても大丈夫です。でも、次も読んでくれると嬉しいなぁ(迫真)
近いうちにPart2出しますのでお待ちください。
また、タイプミスとかなにかあったらコメントくださいー。わからないこととかも答えられる限り答えます。お気軽にどうぞー。
Twitterのフォローもよろしくね!

SNSとか

GitHub: @Hiro527
Twitter: @zHiro527
Discord: Hiro527#1872

注釈


  1. コマンドプロンプトでは、コピー・貼付けはCtrl+Shift+CかVです。Ctrl+Cはコマンドを強制終了させるときのショートカットなので、知っとくと便利(というか必須)です。 

  2. 「プロンプトが帰ってくる」とは、コマンドの処理が終わってプロンプトが表示されることを言います。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ChromebookでLinuxをしたいの! - Part1 日本語化

免責事項

当記事は以下の環境にて検証済みであり、端末やOSのバージョン(ChromeOS, Linux)によっては必ずしも成功するとは限りません。また、記事の内容を実行したことによって生じた損害については一切の責任は負いませんのでご了承ください。
あと、画像多めなので少し重いかもです。

環境
Lenovo Chromebook S330
CPU: 4xMediaTek MT8173C@2.10GHz(aarch64)
RAM: LPDDR3 4GB
OS: ChromeOS 81.0.4044.141(2020/5/16(Sat)時点最新版)

Linuxは下の画像のとおりです。
Screenshot 2020-05-16 at 10.15.33.png

Chrostiniナニソレオイシイノ

美味しいです。とっても。食べられません。でも、すっごい良い機能です。ChromebookでLinuxが使えるんですよ?裏蓋開けたりブートローダーいじったりしなくても。それに、仮想環境の中で動くからもしやらかしても最悪再インストールしなおせばいいだけだし、ChromeOS側の環境に与える影響もすごく小さい。
この記事では、「Chrostini使いたいけどどうすればいいかよくわからない...。」というような迷える子羊たちのために書かれた記事ですので、玄人諸君にはあまり合わないかもしれません。超絶丁寧に説明するので最後まで読んでいってね。あぁ、読み方は「くろすてぃーに」だと思います。

目標

↓こんな感じになります。かっこいいでしょ。↓(ユーザー名が違うのは開発用じゃなくて僕が普段使ってる環境で撮ったスクショだからだよ)
Screenshot 2020-05-16 at 10.30.15.png
今回は、とりあえず日本語化をしてGUIソフトで日本語入力できるようにするところまでやります。

Linux ON!

さぁ、Linuxを使えるようにしましょう。最新版のChromeOSなら特別なことは不要ですが、少しいじります(どっちなんだよ)
デフォルトでは、Linuxよインストールしたときのユーザー名はChromeOSで使われているGoogleIDになります。

ユーザー名の例
Konohage@example.com だったらユーザー名は Konohage
Horiemon@example.com だったらユーザー名は Horiemon

こんな感じ。嫌だね。どうしましょうか。
Chromeでこのページを開いて、一番上の'Allow picking your Chrostini username'をDefaultからEnabledにしてください。すると、下の方に'Restart'が出てくるので、これを押して再起動してください。
Screenshot 2020-05-16 at 09.31.19.png
これで、Chrostiniのユーザー名を設定できるようになりました。
じゃあ、インストールしましょう。
設定を開いて。。。「Linux(ベータ版)」を押して。。。
Screenshot 2020-05-16 at 09.32.49.png
Linuxをオンにする!!!
Screenshot 2020-05-16 at 09.42.50.png
と、こんな感じの画面が出てきます。ユーザー名を選択しましょう。ここでタイプミスとか変な名前にすると、99%変更不可能なので、気をつけましょう。僕は一回やりました。
で、インストール!!!します。
Screenshot 2020-05-16 at 09.33.22.png
結構時間かかるので首をろくろっ首のようにして待ちましょう。まあ、5分くらいですかね。

待ってる間の暇つぶしには、僕はゲームをやるかな...?Krunkerはブラウザでできて、楽しいゾ。FPS楽しい!(゚∀゚)アヒャ

インストールが終わると、こうなります。
Screenshot 2020-05-16 at 09.49.30.png
Linuxのプロンプトですね。おめでとうございます!Linuxが動きました!

更新タイム

さあ、Linuxが動きました。嬉しい!!!けど、ソフトを更新しないとダメです!やっていきましょう。

更新
$ sudo apt update -y && sudo apt upgrade -y

このコマンドをCtrl+CでコピーしてCtrl+Shift+V1で貼り付けて、Enter!!
Screenshot 2020-05-16 at 09.54.43.png
わーーーーーーっていろいろ出てくるけど、基本待つだけ。待ちませう。で、上のスクショのようにプロンプトが帰ってきたら2OK。更新は終了。

待ってる間にコマンドの解説。

解説
$ sudo apt update -y && sudo apt upgrade -y
1. sudo: 管理者権限でコマンドを実行するためのコマンド。システムに変更を与えるコマンドは基本的にはこれが必要。「すどー」「すど」「すどぅ」が読み方かな。人によって違ったりするよ。
2. apt: パッケージ(ソフトウェア)を管理するコマンド。「あぷと」であってるはず。~~どこかの塾と同じです~~
3. apt update: パッケージのリストを更新するコマンド。
4. apt upgrade: インストールされているパッケージをすべて更新するコマンド。
5. -y: aptコマンドにつけているオプション。これをつけなかったら、インストール時に色々聞かれてはいいいえで答えないといけなくなって面倒だからつけてる。
6. &&: 2つのコマンドを同時に実行できるやつ。

更新は終わりましたか?じゃあ次に移りましょう。

パスワードを設定しとこう

デフォルトではユーザーにはパスワードが設定されていません。すると、次回のところで困るので設定しておきましょう。

パスワード変更
$ sudo passwd $USERNAME

Screenshot 2020-05-16 at 09.55.28.png
必ずsudoをつけてください。つけないと不可能です。(現在のパスワードを求められるが設定されていないため)

日本語化

英語でいいんだというツワモノはここはやる必要ありません。()
まずはこれを実行して言語を変更しましょう。

dpkg-reconfigure
$ sudo dpkg-reconfigure locale

すると、こんな感じになります。
Screenshot 2020-05-16 at 09.55.57.png
矢印キーで下へ行って、'en_US.UTF-8'を探して、見つけたらスペースキーを押して'*'を消しましょう。
Screenshot 2020-05-16 at 09.56.37.png
そして、'ja_JP.UTF-8'を探して、スペースキーで'*'をつけてください。
Screenshot 2020-05-16 at 09.57.10.png
そうしたら、enterキーを押して
Screenshot 2020-05-16 at 09.57.16.png
'ja_JP.UTF-8'のところでもう一回enter
Screenshot 2020-05-16 at 09.57.25.png
こんな感じになったらOK。プロンプトで$ clearを実行して画面をお掃除しましょう。
次に、日本語入力をできるようにしましょう。

fcitxのインストール
$ sudo apt install fcitx fcitx-mozc nano -y

$ apt installはパッケージをインストールするためのコマンドです。sudoをつけてください。結構時間がかかるので肘で顎を触れるか試して待ちましょう。nanoはテキストエディタです。このあと使うので一緒に入れてください。
Screenshot 2020-05-16 at 10.00.08.png
わーーーーーーって出てきて、プロンプトが帰ってきたらOK。終わり。
で、設定をいじります。

$ sudo nano /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf

で、開いたファイルの一番下に矢印キーで移動して、下の四行を追加してください。

cros-garcon-override.conf
Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"
Environment="GDK_BACKEND=x11"

できたら、Ctrl+Sで保存してCtrl+Xで終了です。
次に、設定ファイルをホームディレクトリに追加します。これがないと日本語入力のやつが自動起動しません。

$ nano ~/.sommelierrc

で、開いたファイルに

.sommelierrc
/usr/bin/fcitx-autostart

を追加してください。というか中身はもともと空です。で、保存からの終了。
そうしたら、Linuxコンテナを再起動してください。
Screenshot 2020-05-16 at 10.07.30.png
ターミナルのアイコンを右クリックして「Linux(ベータ版)を終了」をクリック。しばらく待ってからもう一度ターミナルを開けばOKです。
で、仕上げです。

$ fcitx-configtool

でfcitxの設定を開いてください。
Screenshot 2020-05-16 at 10.08.49.png
そうしたら、キーボードを自分のものにあわせて下の+ボタンや-ボタンで編集してください。キーボードが一番上に、その下にMozcがあればOK。
で、アドオンのタブを開いて、「Advanced」(拡張)にチェックを入れて、検索欄に「xim」と入れてください。
Screenshot 2020-05-16 at 10.09.09.png
一つだけ検索結果に出てくるのでクリック。
Screenshot 2020-05-16 at 10.09.13.png
「XIMでOn the spotスタイルを使う」にチェックマークを入れてください。そして、閉じてOKです。(スクショになにか写り込んでるのは気にしないで)

中の人から

とりあえず、日本語化はこれで終了です。次回はかっこよく、より使いやすくしていきます。
別にかっこよくなくてもいいやと言う人はここで終わっても大丈夫です。でも、次も読んでくれると嬉しいなぁ(迫真)
近いうちにPart2出しますのでお待ちください。
また、タイプミスとかなにかあったらコメントくださいー。わからないこととかも答えられる限り答えます。お気軽にどうぞー。
Twitterのフォローもよろしくね!

SNSとか

GitHub: @Hiro527
Twitter: @zHiro527
Discord: Hiro527#1872

注釈


  1. コマンドプロンプトでは、コピー・貼付けはCtrl+Shift+CかVです。Ctrl+Cはコマンドを強制終了させるときのショートカットなので、知っとくと便利(というか必須)です。 

  2. 「プロンプトが帰ってくる」とは、コマンドの処理が終わってプロンプトが表示されることを言います。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ChromebookでLinuxをかっこよく! - Part1 日本語化

免責事項

当記事は以下の環境にて検証済みであり、端末やOSのバージョン(ChromeOS, Linux)によっては必ずしも成功するとは限りません。また、記事の内容を実行したことによって生じた損害については一切の責任は負いませんのでご了承ください。
あと、画像多めなので少し重いかもです。

環境
Lenovo Chromebook S330
CPU: 4xMediaTek MT8173C@2.10GHz(aarch64)
RAM: LPDDR3 4GB
OS: ChromeOS 81.0.4044.141(2020/5/16(Sat)時点最新版)

Linuxは下の画像のとおりです。
Screenshot 2020-05-16 at 10.15.33.png

Chrostiniナニソレオイシイノ

美味しいです。とっても。食べられません。でも、すっごい良い機能です。ChromebookでLinuxが使えるんですよ?裏蓋開けたりブートローダーいじったりしなくても。それに、仮想環境の中で動くからもしやらかしても最悪再インストールしなおせばいいだけだし、ChromeOS側の環境に与える影響もすごく小さい。
この記事では、「Chrostini使いたいけどどうすればいいかよくわからない...。」というような迷える子羊たちのために書かれた記事ですので、玄人諸君にはあまり合わないかもしれません。超絶丁寧に説明するので最後まで読んでいってね。あぁ、読み方は「くろすてぃーに」だと思います。

目標

↓こんな感じになります。かっこいいでしょ。↓(ユーザー名が違うのは開発用じゃなくて僕が普段使ってる環境で撮ったスクショだからだよ)
Screenshot 2020-05-16 at 10.30.15.png
今回は、とりあえず日本語化をしてGUIソフトで日本語入力できるようにするところまでやります。

Linux ON!

さぁ、Linuxを使えるようにしましょう。最新版のChromeOSなら特別なことは不要ですが、少しいじります(どっちなんだよ)
デフォルトでは、Linuxよインストールしたときのユーザー名はChromeOSで使われているGoogleIDになります。

ユーザー名の例
Konohage@example.com だったらユーザー名は Konohage
Horiemon@example.com だったらユーザー名は Horiemon

こんな感じ。嫌だね。どうしましょうか。
Chromeでこのページを開いて、一番上の'Allow picking your Chrostini username'をDefaultからEnabledにしてください。すると、下の方に'Restart'が出てくるので、これを押して再起動してください。
Screenshot 2020-05-16 at 09.31.19.png
これで、Chrostiniのユーザー名を設定できるようになりました。
じゃあ、インストールしましょう。
設定を開いて。。。「Linux(ベータ版)」を押して。。。
Screenshot 2020-05-16 at 09.32.49.png
Linuxをオンにする!!!
Screenshot 2020-05-16 at 09.42.50.png
と、こんな感じの画面が出てきます。ユーザー名を選択しましょう。ここでタイプミスとか変な名前にすると、99%変更不可能なので、気をつけましょう。僕は一回やりました。
で、インストール!!!します。
Screenshot 2020-05-16 at 09.33.22.png
結構時間かかるので首をろくろっ首のようにして待ちましょう。まあ、5分くらいですかね。

待ってる間の暇つぶしには、僕はゲームをやるかな...?Krunkerはブラウザでできて、楽しいゾ。FPS楽しい!(゚∀゚)アヒャ

インストールが終わると、こうなります。
Screenshot 2020-05-16 at 09.49.30.png
Linuxのプロンプトですね。おめでとうございます!Linuxが動きました!

更新タイム

さあ、Linuxが動きました。嬉しい!!!けど、ソフトを更新しないとダメです!やっていきましょう。

更新
$ sudo apt update -y && sudo apt upgrade -y

このコマンドをCtrl+CでコピーしてCtrl+Shift+V1で貼り付けて、Enter!!
Screenshot 2020-05-16 at 09.54.43.png
わーーーーーーっていろいろ出てくるけど、基本待つだけ。待ちませう。で、上のスクショのようにプロンプトが帰ってきたら2OK。更新は終了。

待ってる間にコマンドの解説。

解説
$ sudo apt update -y && sudo apt upgrade -y
1. sudo: 管理者権限でコマンドを実行するためのコマンド。システムに変更を与えるコマンドは基本的にはこれが必要。「すどー」「すど」「すどぅ」が読み方かな。人によって違ったりするよ。
2. apt: パッケージ(ソフトウェア)を管理するコマンド。「あぷと」であってるはず。~~どこかの塾と同じです~~
3. apt update: パッケージのリストを更新するコマンド。
4. apt upgrade: インストールされているパッケージをすべて更新するコマンド。
5. -y: aptコマンドにつけているオプション。これをつけなかったら、インストール時に色々聞かれてはいいいえで答えないといけなくなって面倒だからつけてる。
6. &&: 2つのコマンドを同時に実行できるやつ。

更新は終わりましたか?じゃあ次に移りましょう。

パスワードを設定しとこう

デフォルトではユーザーにはパスワードが設定されていません。すると、次回のところで困るので設定しておきましょう。

パスワード変更
$ sudo passwd $USERNAME

Screenshot 2020-05-16 at 09.55.28.png
必ずsudoをつけてください。つけないと不可能です。(現在のパスワードを求められるが設定されていないため)

日本語化

英語でいいんだというツワモノはここはやる必要ありません。()
まずはこれを実行して言語を変更しましょう。

dpkg-reconfigure
$ sudo dpkg-reconfigure locales

すると、こんな感じになります。
Screenshot 2020-05-16 at 09.55.57.png
矢印キーで下へ行って、'en_US.UTF-8'を探して、見つけたらスペースキーを押して'*'を消しましょう。
Screenshot 2020-05-16 at 09.56.37.png
そして、'ja_JP.UTF-8'を探して、スペースキーで'*'をつけてください。
Screenshot 2020-05-16 at 09.57.10.png
そうしたら、enterキーを押して
Screenshot 2020-05-16 at 09.57.16.png
'ja_JP.UTF-8'のところでもう一回enter
Screenshot 2020-05-16 at 09.57.25.png
こんな感じになったらOK。プロンプトで$ clearを実行して画面をお掃除しましょう。
次に、日本語入力をできるようにしましょう。

fcitxのインストール
$ sudo apt install fcitx fcitx-mozc nano -y

$ apt installはパッケージをインストールするためのコマンドです。sudoをつけてください。結構時間がかかるので肘で顎を触れるか試して待ちましょう。nanoはテキストエディタです。このあと使うので一緒に入れてください。
Screenshot 2020-05-16 at 10.00.08.png
わーーーーーーって出てきて、プロンプトが帰ってきたらOK。終わり。
で、設定をいじります。

$ sudo nano /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf

で、開いたファイルの一番下に矢印キーで移動して、下の四行を追加してください。

cros-garcon-override.conf
Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"
Environment="GDK_BACKEND=x11"

できたら、Ctrl+Sで保存してCtrl+Xで終了です。
次に、設定ファイルをホームディレクトリに追加します。これがないと日本語入力のやつが自動起動しません。

$ nano ~/.sommelierrc

で、開いたファイルに

.sommelierrc
/usr/bin/fcitx-autostart

を追加してください。というか中身はもともと空です。で、保存からの終了。
そうしたら、Linuxコンテナを再起動してください。
Screenshot 2020-05-16 at 10.07.30.png
ターミナルのアイコンを右クリックして「Linux(ベータ版)を終了」をクリック。しばらく待ってからもう一度ターミナルを開けばOKです。
で、仕上げです。

$ fcitx-configtool

でfcitxの設定を開いてください。
Screenshot 2020-05-16 at 10.08.49.png
そうしたら、キーボードを自分のものにあわせて下の+ボタンや-ボタンで編集してください。キーボードが一番上に、その下にMozcがあればOK。
で、アドオンのタブを開いて、「Advanced」(拡張)にチェックを入れて、検索欄に「xim」と入れてください。
Screenshot 2020-05-16 at 10.09.09.png
一つだけ検索結果に出てくるのでクリック。
Screenshot 2020-05-16 at 10.09.13.png
「XIMでOn the spotスタイルを使う」にチェックマークを入れてください。そして、閉じてOKです。(スクショになにか写り込んでるのは気にしないで)

中の人から

とりあえず、日本語化はこれで終了です。次回はかっこよく、より使いやすくしていきます。
別にかっこよくなくてもいいやと言う人はここで終わっても大丈夫です。でも、次も読んでくれると嬉しいなぁ(迫真)
近いうちにPart2出しますのでお待ちください。
また、タイプミスとかなにかあったらコメントくださいー。わからないこととかも答えられる限り答えます。お気軽にどうぞー。
Twitterのフォローもよろしくね!

SNSとか

GitHub: @Hiro527
Twitter: @zHiro527
Discord: Hiro527#1872

注釈


  1. コマンドプロンプトでは、コピー・貼付けはCtrl+Shift+CかVです。Ctrl+Cはコマンドを強制終了させるときのショートカットなので、知っとくと便利(というか必須)です。 

  2. 「プロンプトが帰ってくる」とは、コマンドの処理が終わってプロンプトが表示されることを言います。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

InstantOS 1 インストール

InstantOS 1 をインストールしました。

Arch系、ManjaroベースのLinuxです。
本家のページ ←クリック(新窓)

インストール後、お約束の .xprofile の書き足しが必要
ここまで出来れば、あとは簡単です。
本家のWMがちょっと使いにくい・・
私はLXQTをデスクトップ環境にしました。
現在のデスクトップ画面
200516_01.jpeg
画面では conky を使ってちょっと派手目です。
WallPaper は拾い物。

Arch らしい軽量軽快な動作で十分満足しています。
ソフトウェアーは Pamac が付属。
インストール、アップデートに困ることはありません。

Arch ファンの方々、お試し下さい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

sudo apt-get update のエラーと警告を虱潰しに直していくだけ

linux を使ってるとしばしばsudo apt-get update をするのですが、よく警告が出てきます。今回はそのお掃除

また増えたらかきたすかも(2020/05/16)

今回は2つ

E: The repository 'http://ppa.launchpad.net/kazam-team/unstable-series/ubuntu bionic Release' does not have a Release file.

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD

上が見にくいために平文も貼っておきます↓

E: The repository 'http://ppa.launchpad.net/kazam-team/unstable-series/ubuntu bionic Release' does not have a Release file.

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD

解決策 1

公開鍵の期限が切れているので更新してあげる。

参照:https://linuxconfig.org/how-to-list-and-remove-ppa-repository-on-ubuntu-18-04-bionic-beaver-linux

解決策 2

ppaファイルのrepository を消してあげる。

 sudo apt-add-repository -r ppa:kazam-team/unstable-series

参照:https://linuxconfig.org/how-to-list-and-remove-ppa-repository-on-ubuntu-18-04-bionic-beaver-linux

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

システムリソースの制限(ulimit)

はじめに

https://qiita.com/hot_study_man/items/24ba3e00fc936abab58b

このあたりで、システムのリソースを制限したりすることが今後あるだろうと思って、ulimitについて調べてみた

制限の対象

システム全体

システム全体で利用可能なプロセス数やファイルすうなどのリソース制限は、sysctlコマンド

ユーザーやグループ単位 デーモンではない

  • ulimitコマンド
    • そのユーザーでログインして、ulimitコマンドを使う
  • /etc/security/limits.conf
    • ユーザーを記入して制限値を書く
    • ログインシェルを介した制限

デーモンプロセス

  • Cent7の場合、systemdの設定ファイルに制限値を記載する必要あり

↓ apcheのプロセス数の変更があるが、一時的に有効になっているだけで、OS再起動などしたら無効になる
https://takeshiyako.blogspot.com/2013/01/httpdulimit.html

ulimitコマンド

bashなどに含まれている内部コマンドで各プロセスが利用できるリソースに制限をかけることができる

以下-Sor-Hがない場合、ソフトリミット、ハードリミット両方に対して指定値が反映

//ソフトを4000
ulimit -Sn 4000
// ソフトもハードもどっちも4000
ulimit -n 4000

ソフトリミット -S

  • 現在有効なユーザーの利用可能なリソースの制限。ハードリミットまで増やすことができる

ハードリミット -H

  • 一般ユーザーはハードリミットの値は減らすことはできるが、増やすことはできない
  • rootユーザーは増やすことができる

書き方

ulimit -Sn 4000
ulimit -Sm 4000

ユーザーから実行したプロセスのリソースへの制限値確認

このログインしたユーザーからプロセスを実行すると下記制限がかかる(デフォルト)

# ulimit -Sa
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15234
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15234
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
root@web2:~
# ulimit -Ha
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15234
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15234
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

プロセスのulimitの確認 apacheの場合

# ps auxf | grep httpd
root     17733  0.0  0.0 103320   872 pts/0    S+   04:07   0:00          \_ grep httpd
root     19585  0.0  0.6 431068 25856 ?        Ss   Mar02   6:53 /usr/sbin/httpd
apache   15562  0.0  1.1 456336 46312 ?        S    03:16   0:01  \_ /usr/sbin/httpd
apache   15563  0.0  1.4 471072 60616 ?        S    03:16   0:02  \_ /usr/sbin/httpd
apache   15564  0.0  1.3 464788 55224 ?        S    03:16   0:02  \_ /usr/sbin/httpd
apache   15565  0.0  1.2 467252 49708 ?        S    03:16   0:02  \_ /usr/sbin/httpd
apache   15566  0.0  0.6 435212 24552 ?        S    03:16   0:00  \_ /usr/sbin/httpd
apache   15567  0.0  0.7 439356 28732 ?        S    03:16   0:00  \_ /usr/sbin/httpd
apache   15572  0.0  1.5 474280 63620 ?        S    03:16   0:01  \_ /usr/sbin/httpd
apache   15573  0.0  0.7 439336 28892 ?        S    03:16   0:01  \_ /usr/sbin/httpd
apache   15593  0.0  0.7 446508 29296 ?        S    03:16   0:01  \_ /usr/sbin/httpd
apache   15594  0.0  0.7 441316 30808 ?        S    03:16   0:00  \_ /usr/sbin/httpd
apache   15595  0.0  0.8 452592 34920 ?        S    03:16   0:01  \_ /usr/sbin/httpd
apache   17697  0.0  0.4 431068 19140 ?        S    04:06   0:00  \_ /usr/sbin/httpd

制限の確認

# cat /proc/19585/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            10485760             unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             15234                15234                processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       15234                15234                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        

デーモンプロセスに対してlimit制限の変更

https://staffblog.yumemi.jp/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%BF%E6%95%B0%E3%81%AE%E4%B8%8A%E9%99%90%E5%A4%89%E6%9B%B4%E3%81%A8limits-conf%E3%81%AE%E7%BD%A0-2/

https://go-journey.club/archives/4823

PAM 認証

「/etc/security/limits.conf」で設定した値はログインしない「デーモンプロセス」には効果がありません。
細かく説明すると、理由はログイン時や su コマンド実行時に PAM 認証されたタイミングで /etc/security/limits.conf の設定が適用されるため、デーモンプロセスには効かないということになります。

daemon系プロセスのファイルディスクリプタ数上限を設定する際、/etc/security/limits.conf は使えません。状況によっては一見設定されたように見えますが、大きな落とし穴にはまることになります。
面倒ですが、必要なプロセス毎にulimitを用いて適切に設定しましょう。

一時的にlimits.confの設定内容が有効になるだけ

つまり、手動で再起動した場合は一時的にlimits.confの設定内容が有効になるだけなのです。
当然、マシン自体が再起動した場合はinitが各daemonを起動し、PAM認証が入らないため、OS規定の上限値である1024に戻ってしまいます。

結局、リミット値を上げるには、ulimit -n の記述を

daemontoolsであれば、/service/<サービス名>/runファイルに追加
rcスクリプトであれば、/etc/init.d/<サービス名>ファイルに追加
しないといけません。

ただしapacheの場合、apachectl経由での制御を行うとrcスクリプトを介さないため、apachectlにも追加しておかないといけないことに注意してください。

Cent7の場合

systemdの設定ファイルに設定値を書く

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む