投稿

2017の投稿を表示しています

Arch Linuxを定期的にアップデートさせる

Arch Linuxを定期的にアップデートさせたい。 pacmanコマンドに"--noconfirm"オプションを付けることで、確認無しでアップデートしてくれる。 # pacman -Syu --noconfirm さらに、アップデート正常終了後に再起動させる。 # pacman -Syu --noconfirm && systemctl reboot cronにこれをやらせる。 まず、上記のコマンドを実行するシェルスクリプトを作成する。FHSに従うと自作のシェルスクリプトは /usr/local/bin/ っぽいのでそこに作成する。 # vim /usr/local/bin/update_system_and_reboot.sh #!/bin/bash pacman -Syu --noconfirm && systemctl reboot cronに登録する。 # EDITOR=vim crontab -e * 7 * * 0 /usr/local/bin/update_system_and_reboot.sh

普通のSynapticsタッチパッドを高感度タッチパッドにしてみる

イメージ
Macのタッチパッドはズームもジェスチャもヌルヌル動いて気持ちが良いです。 それに比べて今までのWindowsのタッチパッドはガッタガタでした。その理由はSynapticsのアプリケーションが ジェスチャ等を感知してマウス入力やキーボードショートカットに変換していたためです。 いつからか分かりませんが、Windowsでは高精度タッチパッド(Precision Touchpad)というものに対応しており、タッチパッドの入力をそのままWindowsに送ることができるようになりました。 高精度タッチパッドに対応している場合、設定→デバイス→タッチパッド を開くと、「お使いのPCには高精度タッチパッドが用意されています。」と表示されます。 常用しているThinkPad X240はもちろん対応していませんでした。 調べていくうちに、こんなサイトを見つけました。 https://www.howtogeek.com/325347/how-to-enable-microsofts-precision-touchpad-drivers-on-your-laptop/   このサイトによると、高精度タッチパッドに対応しているThinkPad X1のタッチパッドドライバを無理やり入れることで高精度タッチパッドに対応するらしいです。 早速ThinkPad X240でやってみました。  できました。 ジェスチャーもズームもヌルヌル動いてくれます。 普通のPCならこれで万々歳ですが、ThinkPadにはトラックパッド というものがあります。 このドライバを入れることでThinkPad X240のトラックパッドの右クリックが効かなくなってしまいました。 Synapticsの設定画面もフリーズして開けなくなってしまったので泣く泣く元のドライバに戻してあげました。 5ボタントラックパッドではなく、普通の3ボタントラックパッドなら使えるかもしれません。

iptables 設定メモ

-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -A INPUT -i br0 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 192.168.1.0/24 -j ACCEPT -A FORWARD -i br0 -j ACCEPT -A FORWARD -i lo -j ACCEPT -A FORWARD -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

Lenovo SettingsがLenovo Companionに統合された

Lenovo SettingsがLenovo Companionに統合されました。 また、今までLenovoアカウントにログインするためにはLenovoアカウントポータルというアプリも必要でしたが、これも不要になりました。 今後はLenovo Companion 1つだけあれば良さそうです。

Windowsのスタートメニューショートカットの場所

ユーザーごと %APPDATA%\Microsoft\Windows\Start Menu\Programs 全ユーザー %ALLUSERSPROFILE% \Microsoft\Windows\Start Menu\Programs

PMMPサーバの構築 (Linux)

1. 適当なPMMPサーバ用のディレクトリを作成     ~$ mkdir pmmp 2. pharファイルのダウンロード      https://jenkins.pmmp.io/job/PocketMine-MP/     PocketMine-MP_*_*_API-*.pharをダウンロード。     PocketMine-MP.pharにリネームしてPMMPサーバディレクトリにコピー。     $ cd /tmp     /tmp$ wget https://jenkins.pmmp.io/job/PocketMine-MP/132/artifact/PocketMine-MP_1.7dev-132_b54f256f_API-3.0.0-ALPHA9.phar     /tmp$ cp PocketMine-MP_1.7dev-132_b54f256f_API-3.0.0-ALPHA9.phar ~/pmmp/PocketMine-MP.phar 3. PHPバイナリのダウンロード      https://jenkins.pmmp.io/     pharファイルの要求するPHPのバージョンを選択。     PHP_Linux-x86_64.tar.gzをダウンロード。     解凍して、binフォルダをPMMPサーバディレクトリにコピー。     $ cd /tmp     /tmp$ wget https://jenkins.pmmp.io/job/PHP-7.2-Linux-x86_64/lastSuccessfulBuild/artifact/PHP_Linux-x86_64.tar.gz     /tmp$ tar xf PHP_Linux-x86_64.tar.gz     /tmp$ cp -R bin ~/pmmp/ 4. 起動用スクリプトの作成     $ cd ~/pmmp     ~/pmmp$ wget https://raw.githubusercontent.com/pmmp/PocketMine-MP/master/start.sh 5. 起動用スクリプトを実行     初期設定をして完了。     ~/pmmp$ ./start.sh フォルダ構成 pmmp\

PMMPサーバの構築 (Windows)

1. 適当なPMMPサーバ用のフォルダを作成 2. pharファイルのダウンロード      https://jenkins.pmmp.io/job/PocketMine-MP/     PocketMine-MP_*_*_API-*.pharをダウンロード。     PocketMine-MP.pharにリネームしてPMMPサーバフォルダにコピー。 3. PHPバイナリのダウンロード      https://ci.appveyor.com/project/pmmp/php-build-scripts/history     pharファイルの要求するPHPのバージョンを選択。     ARTIFACTSからphp-*-vc*-x64.zipをダウンロード。     解凍して、binフォルダをPMMPサーバフォルダにコピー。 4. VC++ランタイムをインストール      https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads     PHPバイナリの要求するバージョンのVC++ランタイムをインストールする。     php-7.2.0RC3-vc15-x64.zipならvc15の部分がバージョン。 5. 起動用スクリプトの作成      https://github.com/pmmp/PocketMine-MP/blob/master/start.cmd     Rawをクリックしてstart.cmdをダウンロードし、PMMPサーバフォルダにコピー。     PowerShellがいいならこっち      https://github.com/pmmp/PocketMine-MP/blob/master/start.ps1 6. 起動用スクリプトを実行     初期設定をして完了。 フォルダ構成 pmmp\  ├ bin\  ├ PocketMine-MP.phar  └ start.cmd or start.ps1

C++ 継承の使い方

一部だけ処理が異なるような複数のクラスを用意する際、継承を利用することで楽になる。 // Base.h class Base { public:     int a_, b_;     int ans_;     Base(int a, int b) {         a_ = a;         b_ = b;     }     virtual void Calc() = 0;     int Ans() {         return ans_;     } } // Add.h #include "Base.h" class Add : public Base { public:     Add(int a, int b) : Base(a, b) {     }     virtual void Calc() {         ans_ = a_ + b_;     } } // Sub.h #include "Base.h" class Sub : public Base { public:     Sub(int a, int b) : Base(a, b) {     }     virtual void Calc() {         ans_ = a_ - b_;     } } 上記のように、基底クラスを作成し、変更したい関数を仮想関数にする。そのクラスを継承した派生クラスを作成、仮想関数を上書きすることで新しいクラスを作成することができる。 以下のように普通のクラスと同様にインスタンス生成が可能。 Add * add = new Add(2, 1); Sub * sub = new Sub(2, 1); add->Calc(); sub->Calc(); std::cout << add->Ans() << std::endl; std::cout << sub->Ans() << std::endl; 派生クラスは基底クラスの型でもOK。 Base * add = new Add(2, 1); Base * sub =

C++ int型の範囲

int8_t : -128 ~ 127 uint8_t : 0 ~ 255 int16_t : -32768 ~ 32767 uint16_t : 0 ~ 65535 int32_t : -2147483648 ~ 2147483647 uint32_t : 0 ~ 4294967295 int63_t : –9223372036854775808 ~ 9223372036854775807 uint64_t : 0 ~ 18446744073709551615

MGO2R OFW版が公開された

MGO2RのOFW版が公開されました。MGO2Rは、MGO2の非公式サーバ(エミュ鯖)のことで、これまでCFWでしかできなかったものがOFWでもできるようになりました。 MGO2をMGO2Rのサーバに接続するためには、追加データをPS3に入れる必要になりますが、OFWではそのままではインストールできませんでした。 今回、追加データが入ったバックアップデータが公開されたため、このデータからリストアすることでOFWでもMGO2Rへの接続が可能になりました。 リストアする際には本体データが初期化されるため、あらかじめセーブデータ等のバックアップを取っておく必要があります。 手順 まず SaveMGO のアカウントを作成しておきます。MGO2Rへはこのアカウントで接続することになります。 以下のリンクからリストアデータをダウンロードします。 https://savemgo.com/forums/viewtopic.php?f=22&p=4423#p4423 MGS4ディスクならMGS4 Japanから、MGOディスクならMGO Japanからダウンロード、解凍してPS3ディレクトリをUSBメモリにコピーします。 PS3を起動し、USBメモリにコピーしたデータからリストアすると完了です。 MGO2を起動し、SaveMGOのID/パスワードを入力するとプレイが可能になります。

ちょうどいいLinuxデスクトップ環境がない

以前までLinuxのデスクトップ環境といえばGNOME一択という状況でしたが、GNOME 3で大幅に仕様変更され、ディストリビューションによってデスクトップ環境がばらばらになっています。 ディストリビューションごとのデフォルトのデスクトップ環境を利用すれば悩みなどないのですが、Arch Linuxにはそんなものはありません。 様々なデスクトップ環境を試してみたのですが、しっくりくるものが無かったので記しておきます。 GNOME 3 良い:Waylandに移行している。凄まじく安定している。 悪い:拡張機能入れなきゃほぼ使えない。Systemd環境でしか動作しないため、Linux以外のOSでは動作しない。設定項目が少なすぎる。 Plasma 良い:綺麗、かっこいい。Wayland版が開発中。 悪い: アプリケーション一覧が独自で見づらい。標準のデスクトップマネージャがしょぼい。 LXDE 良い:軽い。 悪い:GTK+2(GTK+3版は開発中)。統一されたテーマがない。LXDE自体の機能がほぼ無いため、GNOMEなどのアプリケーションを利用しなければならない。 LXQt 良い:LXDEのQt版。 悪い:動かない。 Xfce 良い:軽い。 悪い:GTK+2ベース。 Unity Ubuntu標準のデスクトップ環境。開発終了。 悪い:Ubuntu専用。使いづらい。広告だらけ。ほぼGnome。 MATE GNOME 2のフォーク。 悪い:GTK+2。 Cinnamon GNOME 3のフォーク。 悪い:GNOMEを使いたくないからCinnamonを使おうとしているのにGNOMEのアプリケーションを使わなきゃいけない。

GNOME 3でFcitxが動かない

Arch Linuxに久しぶりにGNOME 3をインストールしてみたのですが、Fcitxが正常に動作しませんでした。 その原因はGNOME 3のデフォルトウインドウシステムがXorgからWaylandに移行したためでした。 WaylandにはXWaylandというXorg互換環境があり、FirefoxなどのXorgアプリケーションはそれで動いています。 GNOME 3標準のアプリケーションはほとんどWaylandに移行しているのですが、ほとんどのGUIアプリケーションは未だにXorgで動作している状況です。 FcitxもXWayland上で動作しているため、XorgアプリケーションではFcitxが使えるのですが、WaylandアプリケーションではFcitxが利用できません。 Todo-List Fcitx によると、add wayland supportはIn Progressになっています。 対応策としては、デスクトップセッションをGNOME 3 on Xorgとして起動するか、Fcitxの代わりにIbusを利用するしかないようです。

Bash on Windowsに関して

Bashの起動(カレントディレクトリを引き継ぐ) C:\Users\foo> bash /mnt/c/Users/foo$ Bashの起動(WSLのデフォルトユーザのホームディレクトリで起動) C:\Users\foo> bash ~ /home/foo$ Bashを起動せずにLinuxコマンドを実行 > bash -c "コマンド" Windows側のドライブはBoW上では /mnt/ドライブレター としてマウントされています。 C:\ -> /mnt/c/ 逆に、Windows側から見たBoWの/ディレクトリは、 %USERPROFILE%\AppData\Local\lxss\rootfs です。 このフォルダを直接いじるとパーミッションやシンボリックリンクが壊れそうなのでやめておいたほうがよさそうです。 https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/ C:\tesy.pyをBoWのPythonで実行するには > bash -c "python /mnt/c/test.py" とすることができます。 BoWのインストール > lxrun /install     引数に /y で許可を求めません     既にインストールされている場合は再インストールされます。 BoWのアンインストール > lxrun /uninstall     引数に /full でユーザディレクトリも含めて完全に削除、 /y で許可を求めません デフォルトユーザの設定・作成 > lxrun /setdefaultuser ユーザ名 アップデート >lxrun /update     $ sudo apt update と一緒です LinuxのシステムコールをWinNTのシステムコールに変換して実行しているので、LinuxカーネルはWindowsの自前、その他はUbuntuそのもののようです。 $ cat /proc/versi

Ubuntu 16.04で指紋認証ログインしようとした

イメージ
Ubuntuで指紋認証を利用する場合、PPAを追加してFingerPrint GUIを利用するという情報がほとんどです。 ですが、できるだけクリーンな状態を維持したいのであまりPPAは追加したくなく、外部のフロントエンドも利用したくありません。 Arch Linux + Gnome 3の場合にはfprintdをインストールするだけでGnomeと統合してくれましたが、Ubuntuの標準レポジトリにもfprintdがありました。 ぽぬぽぬ: Arch Linuxで指紋認証: 試しにインストールしてみると、設定内の"ユーザアカウント"に「指紋認証ログイン」が追加され、指紋の追加もできました。 これで使えるかと思ったのですがだめでした。

Arch Linux上にSoftEther VPNサーバを簡単に構築

今までxl2tpとOpenSwanでL2TP/IPsec VPNサーバを構築していましたが、SoftEther VPNで簡単に構築することができました。 L2TP/IPsecだけでなく、SSTP、OpenVPNでの接続にも対応しています。 現在の環境は、LAN用NICとhostapdまとめてbr0にブリッジ接続しています。 このbr0にSoftEther VPNサーバをブリッジさせます。 まずSoftEther VPNをインストール $ yaourt -S softethervpn-git SoftEther VPNの起動 $ sudo systemctl start softethervpn-server ここからはWindows等GUIが使えるPCからリモートで設定します。 まずSoftEther VPN Server Managerを公式サイトからダウンロード http://www.softether-download.com/ja.aspx?product=softether 起動し、 新しい接続設定の作成 からホスト名を入力保存。 接続しようとするとSoftEther VPNサーバのパスワードを訊かれるので設定します。 まず仮想HUBを作成します。 "仮想HUBの管理"→"ユーザーの管理"→"新規作成" ユーザー名とパスワードを設定して保存。 IPsec/L2TPの有効化 "IPsec / L2TP 設定"→ "L2TP サーバー昨日を有効にする (L2TP over IPsec)"にチェック ブリッジ設定 今回はVPN通信用のtapデバイスを作成し、これをbr0に追加させます。 "ローカルブリッジ設定"を開き、 "仮想HUB"にさっき作成した仮想HUBを選択。 "新しい tap デバイスとのブリッジ接続"を選択。 "新しい tap デバイス名"に分かりやすいように名前を付ける。今回はvpn0としました。 tapデバイス名で設定した名前は"tap_デバイス名"としてネッ

LineageOSでNow on Tapを有効化する

1, 設定→ボタン→ホームボタン長押しの動作 "検索アシスタント"を選択 2, Googleアプリ→設定→画面の検索 "ホームボタンを押し続け…に指示します。"をオンにする 3, 設定→アプリ→歯車アイコン→アシストと音声入力→アシストアプリ "Google アプリ"を選択

Android Canvasに時計を描画する

public static String timeZoneId = "Asia/Tokyo";  //タイムゾーンを変更できるようにする private void draw() {         Canvas canvas = holder.lockCanvas();         canvas.drawColor(Color.GRAY);         Paint paint = new Paint();         // 中心座標からCANVAS_SIZE_MINの85%に黒色の円を描画         paint.setColor(Color.BLACK);         canvas.drawCircle(CENTER_POS[0], CENTER_POS[1],                 (float) CANVAS_SIZE_MIN / 2f * 0.85f, paint);         // 中心座標からCANVAS_SIZE_MINの80%に白色の円を描画         paint.setColor(Color.WHITE);         canvas.drawCircle(CENTER_POS[0], CENTER_POS[1],                 (float) CANVAS_SIZE_MIN / 2f * 0.8f, paint);         // 中心座標からCANVAS_SIZE_MINの70%に文字盤を描画         paint.setColor(Color.BLACK);         paint.setTextSize(CANVAS_SIZE_MIN / 15); // 文字サイズ         float fontPos = CANVAS_SIZE_MIN / 2f * 0.7f;  // フォント描画位置         float dialWidth;  // 文字の横幅         float dialHeight = paint.descent() + paint.ascent();  // 文字の縦幅         for (int _i = 0; _i < 12; _i++) {  

Windows 10上のFirefoxのタイトルバーに色が反映されない

イメージ
デフォルトではタイトルバーがグレーになっている これだと統一性がないのでシステム色に合わせる [Tip] Get Colored Titlebar Back in Mozilla Firefox in Windows 10 - AskVG about.support → プロファイルフォルダ: フォルダを開く → chrome\userChrome.css を作成 #main-window[windowtype="navigator:browser"] {     background-color: transparent !important; } .titlebar-button {     background-color: transparent !important;     transition: background-color 0.2s ease; } .titlebar-button > .toolbarbutton-icon {     list-style-image: none; } .titlebar-button:hover {     background-color: rgba(0, 0, 0, 0.15) !important; } #titlebar-close:hover {     background-color: #E81123 !important; } #titlebar-close:hover > .toolbarbutton-icon {     list-style-image: url("chrome://browser/skin/caption-buttons.svg#close-white

LZ77による数列の符号化

メモ書き 3134313134を2進数に 3134313134 1567156567 0 783578283 1 391789141 1 195894570 1 97947285 0 48973642 1 24486821 0 12243410 1 6121705 0 3060852 1 1530426 0 765213 0 382606 1 191303 0 95651 1 47825 1 23912 1 11956 0 5978 0 2989 0 1494 1 747 0 373 1 186 1 93 0 46 1 23 0 11 1 5 1 2 1 1 0 (3134313134)_10 = (10111010110100011101001010101110)_2 LZ77符号化 スライド窓 k=16, 符号化部 m=8, 参照部 k-m=8 i                            1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                      0 0 0 0 0 0