20200227のLinuxに関する記事は5件です。

Flatpak で Fcitx が動かない問題

ディストリビューション非依存のパッケージマネージメントシステムとして、Flatpakというものがあります。

このFlatpak、ユーザー権限でバイナリパッケージを手軽にインストールできたりして、Gentoo使いの自分としては便利に使っているのですが、一つ問題があります。それは、日本語入力ができない、という問題です。

正直そんなに日本語入力する機会なんてないし…と思っていましたが、最近チャットツールとかを導入したせいで、日本語を入力する必要に迫られていました。とりあえずは、ブラウザでWeb版を開いてなんとかしていたんですが、重い腰を上げて解決策を探ってみることにしました。

原因

あちこち調べた結果、日本語入力ができない問題は、FcitxとFlatpakアプリとの間で、D-Bus通信がうまく行っていないことが原因とわかりました。

なぜ通信がうまく行っていないのか。その原因は2つありました。1つ目は権限の問題です。
Flatpakはセキュリティにも配慮していて、アプリケーションをサンドボックスに押し込んで実行するようになっています。当然、各種通信やアクセスも制限しています。そうした制限の一部として、ソケット通信も制限されています。D-Busはリンク層としてはソケット通信を行っているので、当然この制限の影響を受けます。

解決策

そのため、この「ファイアウォール」に穴を開ける必要があります。
調べてみるといい感じのIssueがありました。どうやら--talk-name=org.freedesktop.portal.Fcitxと実行時に指定すれば良いようです。恒久的に設定したければ、overrideすればよさそうです。

さて、問題はまだ続きます。
D-Bus通信は、その名の通りバス型の通信システムなので、「宛先」(正確にはオブジェクト名)を指定する必要があります。その「宛先」の命名規則には慣例があって、だいたいのアプリケーションはその慣例に従っていたわけですが、Fcitxはその慣例に従っていませんでした。しかし、Fcitxでのこの修正によって、慣例通りに振る舞うようになりました。
その結果、以前の振る舞いを前提としていた一部のFlatpakアプリでFcitxが動かなくなってしまったのでした。この問題はFcitx側でもすでに把握しています。

解決策は、アプリケーション側が対応してくれるのを待つか、Fcitxにパッチが当たるのを待つか、です。しかし、Fcitx側での修正は、影響範囲が広く、かつ挙動を正しく修正した結果による挙動なため、修正は難しいように思います。

めんどくさいので諦めた

ここまで書いておいて申し訳ないですが、自分はとりあえずiBusに逃げることにしました
だって日本語そんなに打たないんだもの…

以上、Flatpakで日本語入力できなくて困っている方の役に立てれば幸いです。

参考資料

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

Raspberry Pi4セットアップメモ

Raspberry Pi4を買ったので一旦のセットアップ内容を記録としてメモ。SSHとかVNCとかUFWとか。

環境

物理

  • Raspberry Pi 4 Model B/4GB OKdo版
  • HDMI -> HDMI Micro変換アダプタ
  • HDMIモニタ
  • 有線USBキーボード
  • WiFiルーター
  • USB TypeCケーブルとその電源
  • Androidスマホ(Huawei P30 Pro)

論理

  • Raspbian GNU/Linux 10 (buster)
  • RLogin 2.24.9
  • JuiceSSH

やったこと

OS入手

  1. raspberrypi.orgからRaspbian Buster with desktop and recommended softwareを落としてきて解凍
  2. balena.ioからbalenaEtcherを落としてきてインストール
  3. 解凍した.imgをbalenaEtcherでmicroSDに焼く
  4. microSDをラズパイに挿す

ラズパイセットアップ

  1. ラズパイにモニタ、キーボード、電源の通ったUSB-Cケーブルを接続
  2. 数分待つとセットアップウィザードが出てくるので適当に進める
    1. この途中でWiFiルーターに繋がるように設定しておく
  3. セットアップウィザードが終わったらWinKeyでメニューを出し設定>Raspberry Piの設定でSSHとVNCを有効
  4. シャットダウンする
  5. 電源USB以外を全部抜く

RDP設定

  1. ラズパイにSSH接続しsudo apt-get update
  2. 終わったらsudo apt-get install xrdp
  3. Windows 10のリモートデスクトップ接続から接続確認

SSHD設定

待受ポートの変更と認証方式の変更

待受ポートの変更と外部接続

  1. sudo nano /etc/ssh/sshd_config
  2. Port 22を適当なポートに変更

認証方式の変更

  1. RLoginの機能で認証キーを生成

  2. sudo nano /etc/ssh/sshd_configで以下の設定に変更

   PubkeyAuthentication yes
   AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
   PasswordAuthentication no
   PermitEmptyPasswords no
  1. ~/.ssh/authorized_keysを作る

  2. 公開鍵をコピーして~/.ssh/authorized_keysの一行目に貼り付ける

  3. sudo /etc/init.d/ssh restartでSSHDを再起動

  4. RLoginから再接続できたらOK

AndroidからSSH接続

  1. RLoginから秘密鍵を吐く
  2. JuiceSSHで秘密鍵を読む
  3. 終わり

Uncomplicated Firewallのインストールと設定

  1. sudo apt install ufw

  2. systemctl start ufw

  3. sudo ufw enableでFirewallを有効化

  4. SSHの穴をあける

    1. sudo ufw allow SSHのポート番号
  5. VNSの穴をあける

    1. WindowsRDPからラズパイに接続
    2. 蹴られるのでcat /var/log/ufw.logでログを見る
    3. 蹴られているDPT3389だったのでsudo ufw allow 3389
      1. help.ubuntu.comによるとSPTがSource Port、DPTがDestination Portということらしい
  6. sudo ufw status numberedで設定内容を確認

  7. SSHとRDPの接続確認

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

[android] AVDがpermission deniedで使えない時

開発環境

linux

やり方

qemu-kvmをいれて、kvmグループにオレを追加して、/dev/kvmの所有権をオレにする

sudo apt install qemu-kvm
sudo adduser yourname kvm
sudo chown yourname /dev/kvm
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[linux] よく忘れるコマンドメモ

ユーザーをグループへ追加

sudo adduser username groupname   

ユーザ情報

who
whoami
${whoami}


-a, --all -b -d --login -p -r -t -T -u と同じ
-b, --boot 最後にシステムが起動した時刻
-d, --dead 終了したプロセスを表示
-H, --heading ヘッダ行を表示
--ips print ips instead of hostnames. with --lookup,
canonicalizes based on stored IP, if available,
rather than stored hostname
-l, --login システムのログインプロセスを表示する
--lookup 正式なホスト名を DNS から取得するように試みる
-m 標準入力に関連づけられたホスト名とユーザのみを表示する
-p, --process init によって起動されたアクティブプロセスを表示する
-q, --count ログイン中のユーザーのログイン名とユーザ数
-r, --runlevel 現在のランレベルを表示
-s, --short 名前, 行および時間のみを表示 (標準)
-t, --time 最後にシステムの時刻が変更された時刻を表示
-T, -w, --mesg ユーザーのメッセージ状態を +, - または ? で追記
-u, --users ログイン中のユーザを一覧

バージョン確認

cat /etc/os-release

権限

chmod: (change mode) ファイルやディレクトリのアクセス権を変更する
chown: (change owner) ファイルやディレクトリの所有者を変更する
chgrp: (change group) ファイルやディレクトリのグループを変更する

-Rオプションをつけるととディレクトリ配下全てまるごと変更になる

chmod 755 data
chmod -R 755 data
r 4 読み込み権限
w 2 書き込み権限
x 1 実行権限
chown username data
chown -R username data
chgrp usergroup data
chgrp -R usergroup data

フォント

fc-cache -Ev
fc-cache -fv


-E, --error-on-no-fonts raise an error if no fonts in a directory
-f, --force scan directories with apparently valid caches
-r, --really-force erase all existing caches, then rescan
-s, --system-only scan system-wide directories only
-y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning
-v, --verbose display status information while busy
-V, --version display font config version and exit
-h, --help display this help and exit

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

Monitでのサーバー監視等の自動化

Monitとは

統合監視デーモンで、設定の閾値以上でメール通知や自動復旧等や監視を実施することができます。
・httpレスポンス、プロセス、ポートの監視 例)Apache、MySQL、SSL、Postfix、fluentd
・CPU、メモリ、ロードアベレージ、ディスク容量等

1.初期設定(新規でサーバーに導入する場合)

①EPEL rpmパッケージをインストールして有効にする

$ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

②monitをインストール

$ sudo yum -y install monit

③関連ファイルがあるか確認

$ rpm -ql monit
/etc/logrotate.d/monit
/etc/monit.d
/etc/monit.d/logging
/etc/monitrc
/usr/bin/monit
/usr/lib/systemd/system/monit.service
/usr/share/doc/monit-5.14
/usr/share/doc/monit-5.14/COPYING
/usr/share/doc/monit-5.14/README
/usr/share/man/man1/monit.1.gz
/var/log/monit.log

④設定ファイルのバックアップ

$ sudo cp -av /etc/monitrc{,.bk}
`/etc/monitrc' -> `/etc/monitrc.bak'
// -a 権限を出来る限りそのままにしてコピー
// -v コピー前にファイル名を表示する
// {,.bk} ブレース展開と言われる手法で.bkというファイル名でコピー

⑤設定ファイルの編集

$ vi /etc/monitrc
…
set daemon  30              // デフォルトチェック間隔は30secなので任意に変更
…
include /etc/monit.d/*.conf // .confだけを読み込むよう編集

⑤' monitはWWWサーバの機能も持っており、HTTP 経由で設定を参照したり、 サービスの制御を行ったりすることができる

set httpd port 2812 and    # Webインターフェースポート(Default:2812)
    allow localhost        # アクセスを許可するIP(localhost)
    allow XXX.XXX.XXX.XXX/XX  # アクセスを許可するIP(任意のIP)
    allow admin:monit      # 管理コンソールのuser='admin' password='monit'
#以下SSLを使わないためコメントアウト
    #with ssl {            # enable SSL/TLS and set path to server certificate
    #    pemfile: /etc/ssl/certs/monit.pem
    #}

⑥設定ファイルの作成

$ vi /etc/monit.d/XXXX.conf // 設定ごとに新規作成
$ mv /etc/monit.d/logging /etc/monit.d/logging.conf // ログ設定ファイルの名前変更

2.共通設定ファイル

以下がメイン設定ファイルです。

/etc/monitrc
バックアップ:/etc/monitrc.bk

includeして、以下の個別設定ファイルを読み込んでいます。
/etc/monit.d/*.conf

3.個別設定ファイル(例)

/etc/monit.d/test.conf
// 監視プロセス設定
check process test matching "test"
// 起動設定
start program "/usr/local/test/bin/start_test.sh"
// 停止設定
stop program "/usr/local/test/bin/stop_test.sh"
// プロセスがない場合、リスタート
if does not exist then restart
// slackに通知 ※
if does not exist then exec "/usr/local/test/bin/slacknotice.sh"
// 5回の監視中に5回リスタートして起きなければやめる
if 5 restarts within 5 cycles then unmonitor

※実行するシェルに実行権限付与することを忘れないこと
$ chmod +x

※slack通知参考サイト: https://cloudpack.media/10085

monitのベストプラクティスとして以下のcronを仕込むことが推奨されている。

echo "0 */1 * * * /usr/bin/monit monitor all" >> /var/spool/cron/root

https://hogem.hatenablog.com/entry/20090723/1248358467

4.実行コマンド

起動コマンド
$ systemctl start monit
OS起動時に自動起動
$ systemctl enable monit
停止コマンド
$ systemctl stop monit
ステータス
$ monit status
設定を変更した場合のリロード (重要!!)
$ monit reload
設定を変更した場合のテストコマンド
$ monit -t
監視状況を知る
$ monit summary
monitがさぼってる場合(Not monitoredのとき)
$ monit monitor all
コマンド一覧
$ monit -h

5.管理画面(Monit Service Manager)

IP:monitのサーバーのIP
PORT:⑤'で設定したPORT
http://XXX.XXX.XXX.XXX:2812/

6.有償のM/Monitについて

以下のサイトが詳しく記載されていました。
https://inokara.hateblo.jp/category/monit

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