- 投稿日:2020-02-11T20:44:46+09:00
Win10でlinux操作
WSL(Windows Subsystem for Linux)を使用することで、Win10環境でlinux環境が作成できます。
Windowsの設定変更
control.exeを起動(コントロールパネルを開いても同じです)
↓
linux用windowsサブシステム にチェックを入れる
(すでに私の環境では有効化しているので、チェックが入っていますが、デフォルトではチェックが入っていないと思います)
OS再起動を促されるので、従うlinuxのインストール
再起動後、スタートメニューから、MicroSoftStore(ストア)を開き、
検索タブにlinuxを入力し、好きなディストリビューションをインストール
(すでに私の環境にはubuntuがインストールされていますので、インストール済みと表示されています)
以降、ubuntuをインストールした時の操作になります。他のディストリビューションの場合、適宜操作の変更があるかもしれません。linuxの起動
スタートメニュー -> ubuntuを起動
起動後、Installing, this may take a few minutes...が表示されます
数分待ったあと、ユーザ名とパスワードを入力します
(ユーザ名にadminはダメだったみたいです。。ww)
これで環境作成が完了!!
あとはユーザ作ったり、Webサーバ立てたり色々やってみましょう
- 投稿日:2020-02-11T15:50:17+09:00
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
はカーネルみたいですね、間違えてたらご指摘下さい)で、仮想コンソールで何ができるのか
tty1
とtty2
で同一のユーザにログインし、片方でman(マニュアル)
を表示しながら片方で作業tty1
とtty2
でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業tty1
でフリーズした際にtty2
でログインしフリーズしたアプリケーションをkillするtty1
で&
をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2
でコマンドをkillし、再度&
をつけて実行するtty1
で一般ユーザ、tty2
でrootユーザでそれぞれログインし、アクセス権を使い分けるなどなど
ttyを指定して出力
$ echo hoge hogeechoは通常は自分の端末に返ってきますが
$ echo hoge > /dev/tty2とすると、
tty2
にechoが出力されます
手元のコンソールではこんな感じになりました↓
お話変わって、ここからは第二部、ファイル操作編です
ファイル操作
ファイルの簡易作成方法
エディターを起動せずファイルを簡易的に作成する方法がいくつかあります
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 hoge2:
cat
とリダイレクト
cat
って中身を表示するだけのコマンドだと思ってましたがリダイレクトを使用することで(とても)簡易的なエディタみたいな使い方ができます、知らなかった# [ctrl]+[d]で終了 $ cat > file2.txt hoge ho hoge [ctrl]+[d] # 中身を見てみます $ cat file2.txt hoge ho hoge3:
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チョットデキル(本当の意味で)
- 投稿日:2020-02-11T15:50:17+09:00
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
はカーネルみたいですね、間違えてたらご指摘下さい)で、仮想コンソールで何ができるのか
tty1
とtty2
で同一のユーザにログインし、片方でman(マニュアル)
を表示しながら片方で作業tty1
とtty2
でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業tty1
でフリーズした際にtty2
でログインしフリーズしたアプリケーションをkillするtty1
で&
をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2
でコマンドをkillし、再度&
をつけて実行するtty1
で一般ユーザ、tty2
でrootユーザでそれぞれログインし、アクセス権を使い分けるなどなど
普段は意識せず別ウィンドウでコンソール立ち上げて行う作業ですね(まさにそれが仮想コンソールなのですが)ttyを指定して出力
$ echo hoge hogeechoは通常は自分の端末に返ってきますが
$ echo hoge > /dev/tty2とすると、
tty2
にechoが出力されます
手元のコンソールではこんな感じになりました↓
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 hoge2:
cat
とリダイレクト
cat
って中身を表示するだけのコマンドだと思ってましたがリダイレクトを使用することで(とても)簡易的なエディタみたいな使い方ができます、知らなかった# [ctrl]+[d]で終了 $ cat > file2.txt hoge ho hoge [ctrl]+[d] # 中身を見てみます $ cat file2.txt hoge ho hoge3:
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チョットデキル(本当の意味で)
- 投稿日:2020-02-11T14:06:56+09:00
Flutter プラットフォーム固有機能を利用するためのSystemChannels APIについて
はじめに
Flutterからプラットフォーム固有の機能を利用するためのAPIのSystemChannelsについて解説します。
SystemChannelsとは
まず最初に、基本的にこのAPIを使うことは推奨しません。Flutter Framework内部ではこのAPIを多用していますが、以下のように中間レイヤのAPIであるため今後のバージョンアップで変わる可能性が高いです。
SystemChannelsのソースコードを見ると、中身はMethodChannel, EventChannel等を利用していることが分かると思います。MethodChannelやEventChannel等についてはこちらにまとめていますので参考にしてください。
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内部実装が以下です。
Dartfinal 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/OFFSystemChannels.textInput.invokeMethod('TextInput.show'); SystemChannels.textInput.invokeMethod('TextInput.hide');
- 投稿日:2020-02-11T09:24:55+09:00
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に繋がりました。
- 投稿日:2020-02-11T03:10:39+09:00
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 を書き加えて再起動する。
この意味については下記のwikiに詳しい。
LinuxKernel - ソフトウェアエンジニアリング - Torutk
小生が試したところ、 max_cstate=1 で改善した。
- 投稿日:2020-02-11T02:26:06+09:00
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-engineDocker 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 dockerDocker 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:latestdocker-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以上です。