20200211のLinuxに関する記事は7件です。

Win10でlinux操作

WSL(Windows Subsystem for Linux)を使用することで、Win10環境でlinux環境が作成できます。

Windowsの設定変更

control.exeを起動(コントロールパネルを開いても同じです)

image.png


linux用windowsサブシステム にチェックを入れる
(すでに私の環境では有効化しているので、チェックが入っていますが、デフォルトではチェックが入っていないと思います)
image.png
OS再起動を促されるので、従う

linuxのインストール

再起動後、スタートメニューから、MicroSoftStore(ストア)を開き、
検索タブにlinuxを入力し、好きなディストリビューションをインストール
(すでに私の環境にはubuntuがインストールされていますので、インストール済みと表示されています)
image.png
以降、ubuntuをインストールした時の操作になります。他のディストリビューションの場合、適宜操作の変更があるかもしれません。

linuxの起動

スタートメニュー -> ubuntuを起動
起動後、Installing, this may take a few minutes...が表示されます
数分待ったあと、ユーザ名とパスワードを入力します
(ユーザ名にadminはダメだったみたいです。。ww)
image.png

これで環境作成が完了!!
あとはユーザ作ったり、Webサーバ立てたり色々やってみましょう

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

Linux勉強会 第1回:仮装コンソールとファイル操作

2月3日、株式会社Ancarで社内勉強会を行いました、この記事はその勉強会トピックのおさらいです

「Linuxの基礎からやるぞ!!!」という内容ですので、基礎的な内容であることをご承知おき下さい

各コマンドの実行はmacOSの標準ターミナルを使用しています

仮装コンソール

通常、一台の端末に複数の接続を行うことができますが、その際それぞれに仮想コンソールというものが割り当てられます
それぞれの仮装コンソールにはtty?番という風に名前が付きます
ttyはTeleTYpewriter(テレタイプライター)に由来する言葉で、入出力装置を指すようです
ttyを切り替えることで端末内で別画面に切り替えたような動作が実現できます
現在は複数のコンソール画面が立ち上げられるため、切り替え動作はあまり必要ないかもしれません

実際にttyコマンドを使用して現在使用中の仮想コンソールを確認してみます

$ tty
/dev/ttys000

tty000を使用していました
今度は別ウィンドウでコンソールを立ち上げttyを打ってみます

$ tty
/dev/ttys001

それぞれのコンソールに別のttyが割り振られています、なるほど

whoコマンドで見てみます

$ who
yungo    console  Feb  9 22:56
yungo    ttys000  Feb 10 10:16
yungo    ttys001  Feb 11 13:46
yungo    ttys002  Feb 11 13:47
yungo    ttys004  Feb 10 20:01
yungo    ttys005  Feb 10 21:14

現在ユーザ名yungoで5つコンソールを立ち上げていたのですがそれぞれにttyが割り振られていました、なるほどなるほど
(一つ目のconsoleはカーネルみたいですね、間違えてたらご指摘下さい)

で、仮想コンソールで何ができるのか

  • tty1tty2で同一のユーザにログインし、片方でman(マニュアル)を表示しながら片方で作業
  • tty1tty2でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業
  • tty1でフリーズした際にtty2でログインしフリーズしたアプリケーションをkillする
  • tty1&をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2でコマンドをkillし、再度&をつけて実行する
  • tty1で一般ユーザ、tty2でrootユーザでそれぞれログインし、アクセス権を使い分ける

などなど

ttyを指定して出力

$ echo hoge
hoge

echoは通常は自分の端末に返ってきますが

$ echo hoge > /dev/tty2

とすると、tty2にechoが出力されます
手元のコンソールではこんな感じになりました↓
スクリーンショット 2020-02-11 14.56.47.png

お話変わって、ここからは第二部、ファイル操作編です

ファイル操作

ファイルの簡易作成方法

エディターを起動せずファイルを簡易的に作成する方法がいくつかあります

1:echoとリダイレクト

# 1行ファイルの作成
$ echo hogehogehogehoge > file1.txt

# 中身を確認してみます
$ cat file1.txt
hogehogehogehoge

# リダイレクトだと上書き
$ echo hoge > file1.txt

$ cat file1.txt
hoge

# 追加リダイレクトだと追記
$ echo hoge >> file1.txt

$ cat file1.txt
hoge
hoge

2:catとリダイレクト

catって中身を表示するだけのコマンドだと思ってましたがリダイレクトを使用することで(とても)簡易的なエディタみたいな使い方ができます、知らなかった

# [ctrl]+[d]で終了
$ cat > file2.txt
hoge
ho
hoge
[ctrl]+[d]

# 中身を見てみます
$ cat file2.txt
hoge
ho
hoge

3:touch

中身のない0バイトのファイルを作成できます
本来touchコマンドはファイルの更新日時を更新するためのコマンドらしいですね…知らなかった…

# ディレクトリを確認
$ ls
file1.txt   file2.txt

# 作成
$ touch file3.txt

# ディレクトリを確認
$ ls
file1.txt   file2.txt   file3.txt

ファイル名の指定方法

先程からcat file1.txtのようにファイル名を指定していますが、これにもいくつか方法があります

ワイルドカード

表で貼ります

記号 説明
* 任意の文字列。空文字でもよい
? 任意の1文字
[...] [ ] 内に含まれる任意の1文字 ( - 記号で範囲指定できる )
[!...] [ ] 内の . . . に含まれない任意の1文字
{ ~ } { } 内に含まれる任意の文字列 ( カンマで区切る )

正規表現っぽく使えますね
例えば先程のディレクトリで試してみます

# 任意の文字列(*以降は何でも該当)
$ ls file*
file1.txt   file2.txt   file3.txt

# 2か3に該当するもの
$ ls file[23].txt
file2.txt   file3.txt

# 範囲指定もできます
$ ls file[1-3].txt
file1.txt   file2.txt   file3.txt

# 単語がマッチするもの
$ ls {file,filo}1.txt
file1.txt   filo1.txt

さいごに

今回はここまでです!!
基礎的な内容が多めですが、いつも使っているコマンドにも知らなかった小技が多いなという印象です
いつも作業時は沢山ウィンドウを開くことになりますが、ttyの概念も念頭に置く必要がありますね

加筆修正、大歓迎ですのでぜひコメントにお願いします!

LINUXチョットデキル(本当の意味で)

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

Linux勉強会 第1回:仮想コンソールとファイル操作

2月3日、株式会社Ancarで社内勉強会を行いました、この記事はその勉強会トピックのおさらいです

「Linuxの基礎からやるぞ!!!」という内容ですので、基礎的な内容であることをご承知おき下さい

各コマンドの実行はmacOSの標準ターミナルを使用しています

おしながき

仮想コンソール

通常、一台の端末に複数の接続を行うことができますが、その際それぞれに仮想コンソールというものが割り当てられます
それぞれの仮想コンソールにはtty?番という風に名前が付きます
ttyはTeleTYpewriter(テレタイプライター)に由来する言葉で、入出力装置を指すようです
ttyを切り替えることで端末内で別画面に切り替えたような動作が実現できます
(現在は複数のコンソール画面が立ち上げられるため、切り替え操作は割愛します)

実際にttyコマンドを使用して現在使用中の仮想コンソールを確認してみます

$ tty
/dev/ttys000

tty000を使用していました
今度は別ウィンドウでコンソールを立ち上げttyを打ってみます

$ tty
/dev/ttys001

それぞれのコンソールに別のttyが割り振られています、なるほど

whoコマンドで見てみます

$ who
yungo    console  Feb  9 22:56
yungo    ttys000  Feb 10 10:16
yungo    ttys001  Feb 11 13:46
yungo    ttys002  Feb 11 13:47
yungo    ttys004  Feb 10 20:01
yungo    ttys005  Feb 10 21:14

現在ユーザ名yungoで5つコンソールを立ち上げていたのですがそれぞれにttyが割り振られていました、なるほどなるほど
(一つ目のconsoleはカーネルみたいですね、間違えてたらご指摘下さい)

で、仮想コンソールで何ができるのか

  • tty1tty2で同一のユーザにログインし、片方でman(マニュアル)を表示しながら片方で作業
  • tty1tty2でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業
  • tty1でフリーズした際にtty2でログインしフリーズしたアプリケーションをkillする
  • tty1&をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2でコマンドをkillし、再度&をつけて実行する
  • tty1で一般ユーザ、tty2でrootユーザでそれぞれログインし、アクセス権を使い分ける

などなど
普段は意識せず別ウィンドウでコンソール立ち上げて行う作業ですね(まさにそれが仮想コンソールなのですが)

ttyを指定して出力

$ echo hoge
hoge

echoは通常は自分の端末に返ってきますが

$ echo hoge > /dev/tty2

とすると、tty2にechoが出力されます
手元のコンソールではこんな感じになりました↓
スクリーンショット 2020-02-11 14.56.47.png
tty000で入力したechoがtty001のカーソル位置に出力されました


お話変わって、ここからは第二部、ファイル操作編です

ファイル操作

ファイルの簡易作成方法

エディターを起動せずファイルを簡易的に作成する方法がいくつかあります

1:echoとリダイレクト

# 1行ファイルの作成
$ echo hogehogehogehoge > file1.txt

# 中身を確認してみます
$ cat file1.txt
hogehogehogehoge

# リダイレクトだと上書き
$ echo hoge > file1.txt

$ cat file1.txt
hoge

# 追加リダイレクトだと追記
$ echo hoge >> file1.txt

$ cat file1.txt
hoge
hoge

2:catとリダイレクト

catって中身を表示するだけのコマンドだと思ってましたがリダイレクトを使用することで(とても)簡易的なエディタみたいな使い方ができます、知らなかった

# [ctrl]+[d]で終了
$ cat > file2.txt
hoge
ho
hoge
[ctrl]+[d]

# 中身を見てみます
$ cat file2.txt
hoge
ho
hoge

3:touch

中身のない0バイトのファイルを作成できます
本来touchコマンドはファイルの更新日時を更新するためのコマンドらしいですね…知らなかった…

# ディレクトリを確認
$ ls
file1.txt   file2.txt

# 作成
$ touch file3.txt

# ディレクトリを確認
$ ls
file1.txt   file2.txt   file3.txt

ファイル名の指定方法

先程からcat file1.txtのようにファイル名を指定していますが、これにもいくつか方法があります

ワイルドカード

記号 説明
* 任意の文字列。空文字でもよい
? 任意の1文字
[...] [ ] 内に含まれる任意の1文字 ( - 記号で範囲指定できる )
[!...] [ ] 内の . . . に含まれない任意の1文字
{ ~ } { } 内に含まれる任意の文字列 ( カンマで区切る )

(追記){ ~ }はワイルドカードには含まれないみたいです
*等のワイルドカードはパス名展開、{~}はブレース展開となっていて、挙動も異なります
(教えていただいた@angel_p_57さん、本当に感謝です!)

先程のディレクトリで試してみます

# 任意の文字列(*以降は何でも該当)
$ ls file*
file1.txt   file2.txt   file3.txt

# 2か3に該当するもの
$ ls file[23].txt
file2.txt   file3.txt

# 範囲指定もできます
$ ls file[1-3].txt
file1.txt   file2.txt   file3.txt

# 単語がマッチするもの
$ ls {file,filo}1.txt
file1.txt   filo1.txt

おおよそ正規表現っぽく使えるみたいですね


今回はここまでです!!

さいごに

基礎的な内容が多めですが、いつも使っているコマンドにも知らなかった小技が多いなという印象です
いつも作業時は沢山ウィンドウを開くことになりますが、ttyの概念も念頭に置く必要がありますね

加筆修正、大歓迎ですのでぜひコメントにお願いします!

LINUXチョットデキル(本当の意味で)

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

Flutter プラットフォーム固有機能を利用するためのSystemChannels APIについて

はじめに

Flutterからプラットフォーム固有の機能を利用するためのAPIのSystemChannelsについて解説します。

SystemChannelsとは

まず最初に、基本的にこのAPIを使うことは推奨しません。Flutter Framework内部ではこのAPIを多用していますが、以下のように中間レイヤのAPIであるため今後のバージョンアップで変わる可能性が高いです。

SystemChannelsのソースコードを見ると、中身はMethodChannel, EventChannel等を利用していることが分かると思います。MethodChannelやEventChannel等についてはこちらにまとめていますので参考にしてください。

スクリーンショット 2020-02-11 13.16.33.png

SystemChannelsの種類

用途毎にいくつかの種類が用意されています。一覧を以下に示します。

種類 機能 上位のFlutter Service
lifecycle ライフサイクル widget
navigation ナビゲーション widget, system_chrome
system 不明…。ここで利用されているが、実質何もしていない widget
accessibility アクセシビリティ (テキスト読み上げなど) PlatformViews, Semantics
platform システム設定 (画面回転, 終了など) SemanticsService,RouteNotificationMessages etc.
platform_views プラットフォーム固有のビュー操作 AndroidView, UiKitView
skia グラフィックス -
keyEvent キー入力 RawKeyEvent
textInput テキスト入力 TextInput, AndroidView, UiKitView

サンプルコード

lifecycle

ライフサイクルリスナー
SystemChannels.lifecycle.setMessageHandler((message){
  print('<SystemChannels.lifecycle> $message');
  /*
  AppLifecycleState.paused
  AppLifecycleState.inactive
  AppLifecycleState.resumed
  AppLifecycleState.suspending
  AppLifecycleState.detached
   */
  return Future<String>.value();
});

navigation

ナビゲーション操作リスナー
SystemChannels.navigation.setMethodCallHandler((call) {
  print('<SystemChannels.navigation> ${call.method} (${call.arguments})');
  /*
   popRoute
   pushRoute
   */
  return Future<dynamic>.value();
});

system

実質何にも使えず、使われておらず、無視して良さそうです。

とりあえずコールバックだけ設定
SystemChannels.system.setMessageHandler((message) {
  print('<SystemChannels.system> $message');
  return Future<dynamic>.value();
});

accessibility

テキスト読み上げサンプル
SemanticsService.announce('Hello world', TextDirection.ltr)

のFlutter Framework内部実装が以下です。

参照

Dart
final AnnounceSemanticsEvent event = AnnounceSemanticsEvent('Hello world', TextDirection.ltr);
SystemChannels.accessibility.send(event.toMap());

platform

アプリ終了
SystemNavigator.pop()

のFlutter Framework内部実装が以下です。

アプリ終了
SystemChannels.platform.invokeMethod('SystemNavigator.pop');

platform_views

flutter_webで利用しているので参考にしてください。

こんな感じでビューを作成していく
final Map<String, dynamic> args = <String, dynamic>{
  'id': 1,
  'viewType': 'Create WebView',
};
SystemChannels.platform_views.invokeMethod('create', args);

skia

Skiaキャッシュサイズ設定。他に機能がなく、今はこれしか出来ない…
const maxBytes = 4 * 1024 * 1024;
SystemChannels.skia.invokeMethod('setResourceCacheMaxBytes', maxBytes);

keyEvent

キー入力リスナー
SystemChannels.keyEvent.setMessageHandler((message) {
  print('<SystemChannels.keyEvent> $message');
  return Future<dynamic>.value();
});

textInput

キーボードの表示ON/OFF
SystemChannels.textInput.invokeMethod('TextInput.show');
SystemChannels.textInput.invokeMethod('TextInput.hide');
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vine Linux 6.5で内蔵無線LANアダプタを使えるようにする

はじめに

Windows7のサポート終了に伴いノートPC lenovo G550にVine Linux 6.5をインストールしましたが無線LANに繋がりません。あまり情報がなかったので解決策をアップしておきます。

方法1

システム>設定>インターネットとネットワーク>ネットワーク接続で無線を選び追加ボタンを押します。無線タブでSSID、無線セキュリティタブで暗号化方式(当方ではWPA & WPA2 Personal)を選択し、パスワードを入力します。最後に保存ボタンを押せば無線設定は完了です。しかし繋がりません。内蔵無線LANアダプタを認識していない様子です。

方法2

ターミナルで
$ lspci
と打ち込むと
Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY
と出てきました。デバイスは認識されているようです。
となるとBCM4312のドライバをインストールする必要がありそうです。

方法3

仕方がないので一旦有線でインターネットに繋ぎます。
synapticパッケージマネージャを起動し、broadcomという名称で検索してみます。それらしきドライバが見つかりました。
self-build-broadcom-wl
著作権などの関係なのか自分でビルドしてインストールという形になっているようです。
インストールしたところ無事に無線LANに繋がりました。

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

intel Atom(ノート) PCでlinuxを使うと頻繁にプチフリーズする。

小生が買ったのは(はまったのは) ASUS E200HA だが、事情は下記と同等と思っていい。

ASUS X205TAでLinuxを使おうなんて考えるな - ハトネコエ Web がくしゅうちょう

ASUS EeeBook X205TAにUbuntu 16.04 LTSをインストール - Qiita

2020時点のmanjaro linuxであれば、インストール自体は苦もなく終了する。無線LANも問題なく使える。むしろ音がならないが。

Xを使ってても頻繁に固まっていたが、メモリが少ないせいだとばかり思っていたが、Xを使ってなくても固まることに最近ようやく気づいた。汎用wifiルータとして、むりやり減価償却しようかと考えたためだ。

コマンド一発でLinuxマシンを即席無線LANルーターにできる「create_ap」がすごい便利だった - Qiita

wifiアクセスポイントとしては稼働したのだが、wifi通信がガッツリ固まるのである。これでようやくアプリの問題ではないことに気づいた次第である。

結論から言えば掲題の通りだが、intel Atom と cpuidle ドライバには相性があるらしい。

grub起動でのカーネルパラメタに intel_idle.max_cstate=X を書き加えて再起動する。

PC freezes anyone? [Possible workaround] · Issue #25 · Grippy98/Asus-E200HA-Linux-Post-Install-Script · GitHub

この意味については下記のwikiに詳しい。

LinuxKernel - ソフトウェアエンジニアリング - Torutk

小生が試したところ、 max_cstate=1 で改善した。

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

CentOS7 で docker-compose up するまで

何度かやる度に調べていたのでまとめました。
特別な事はしていません。

https://docs.docker.com/install/linux/docker-ce/centos/

旧バージョン削除

$ sudo yum -y update
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

Docker Engine インストール

yumリポジトリのセットアップ

$ sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
  • yum-utils
    • yum-config-manager がインストールされる
  • device-mapper-persistent-data/ lvm2
    • docker の devicemapper ストレージドライバに必要
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

で docker の yumリポジトリ追加

$ sudo yum install docker-ce docker-ce-cli containerd.io

完了したら確認

$ docker --version
Docker version 19.03.5, build 633a0ea

サービス起動と自動起動の設定

$ sudo systemctl start docker
$ sudo systemctl enable docker

Docker Compose インストール

https://github.com/docker/compose/releases

なければ curl をインストールしておく

$ sudo yum install -y curl

インストール

$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

確認

$ docker-compose --version
docker-compose version 1.25.4, build 8d51620a

自分を docker グループにいれる。sudo 無しで docker-compose できる様に。
これをやったら一度ログアウト〜再ログインする。

$ sudo usermod -aG docker $USER

確認用の docker-compose.yml 作成。

$ vim docker-compose.yml
version: "3"
services:
  hello:
    image: hello-world:latest

docker-compose up!

$ docker-compose up
Creating network "vagrant_default" with the default driver
Pulling hello (hello-world:latest)...
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest
Creating vagrant_hello_1 ... done
Attaching to vagrant_hello_1
hello_1  |
hello_1  | Hello from Docker!
hello_1  | This message shows that your installation appears to be working correctly.
hello_1  |
hello_1  | To generate this message, Docker took the following steps:
hello_1  |  1. The Docker client contacted the Docker daemon.
hello_1  |  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
hello_1  |     (amd64)
hello_1  |  3. The Docker daemon created a new container from that image which runs the
hello_1  |     executable that produces the output you are currently reading.
hello_1  |  4. The Docker daemon streamed that output to the Docker client, which sent it
hello_1  |     to your terminal.
hello_1  |
hello_1  | To try something more ambitious, you can run an Ubuntu container with:
hello_1  |  $ docker run -it ubuntu bash
hello_1  |
hello_1  | Share images, automate workflows, and more with a free Docker ID:
hello_1  |  https://hub.docker.com/
hello_1  |
hello_1  | For more examples and ideas, visit:
hello_1  |  https://docs.docker.com/get-started/
hello_1  |
vagrant_hello_1 exited with code 0

以上です。

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