2016年12月31日土曜日

google news RSS feedを google feed APIを用いて JSONデータとして取得するJavaScript

2017 Jan. 08.
2016 Dec. 31.

URL書式

https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=件数&q=GOOGLE-NEWS-RSS-URL
  "q=GOOGLE-NEWS-RSS-URL"を最後に記述する。"num=件数"よりも前に"q=GOOGLE-NEWS-RSS-URL"を記述すると失敗する。
  GOOGLE-NEWS-RSS-URL の部分の文字は HTML URL Encoding に置き換える。
    & -> %26
    : -> %3A
    = -> %3D
    ? -> %3F

JSONデータ構造

( http://www.ctrlshift.net/jsonprettyprinter/ を利用 )
{
    "responseData": {
        "feed": {
            "author": "",
            "description": "News",
            "entries": [
                {
                    "author": "",
                    "categories": [
                        "Top Stories"
                    ],
                    "content": "<table border="0" ><xxx>",
                    "contentSnippet": "新聞の ...",
                    "link": "http://xxx.html",
                    "publishedDate": "Fri, 30 Dec 2016 22:59:17 -0800",
                    "title": "xxxのニュース"
            },
               [
                {
                    "author": "",
                    "categories": [
                        "Stories"
                    ],
                    "content": "<table border="0" ><yyy>",
                    "contentSnippet": "新の ...",
                    "link": "http://yyy.html",
                    "publishedDate": "Fri, 30 Dec 2016 23:00:17 -0800",
                    "title": "yyyのニュース"
                }

            ],
            "feedUrl": "https://news.google.com/news?ned=us&hl=ja&output=rss",
            "link": "http://news.google.com/news?hl=ja&amp;ned=us",
            "title": "Top Stories - Google News",
            "type": "rss20"
        }
    },
    "responseDetails": null,
    "responseStatus": 200
}

JavaScript サンプル


function fetchGoogleNewsJson() {
  var url = 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=https%3A//news.google.com/news%3Fned%3Dus%26hl%3Dja%26output%3Drss';
    // HTML URL Encoding
    //   q=https%3A//news.google.com/news%3Fned%3Dus%26hl%3Dja%26output%3Drss
    //    ↑
    //   q=https://news.google.com/news?ned=us&hl=ja&output=rss

  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var data = JSON.parse(json);
  var fetchText = "";
  if (data.responseData.feed.entries) {
    for( var i=0 ; i < data.responseData.feed.entries.length; i++){
      fetchText = fetchText + data.responseData.feed.entries[i].title + "\n" + data.responseData.feed.entries[i].publishedDate.slice(5,-9) + "\n\n";
    }
  }
  return fetchText;
}

2016年12月29日木曜日

WEB API、Google Custom Search、Google Apps Scriptを使ってニュースを定期収集

2016 Dec. 30.
2016 Dec. 29.

googleアカウントにログインする。
 console.cloud.google.com にて
  プロジェクトを作成する。
   プロジェクト名、プロジェクトIDは与えられたものをそのまま使った。

  "API Manager"画面にて
   認証情報画面で(OAuthではない)APIキーを作成する。
   APIキーは後で利用するので控えておく。
   ダッシュボード画面あたりでCustom Search APIを割り当て、
   https://cse.google.com/cse/setup/ や https://cse.google.co.jp/cse/all で
   Google Custom Searchを作成する。Custom SearchのIDは後で使うので控えておく。
   検索対象サイトは  www.47news.jp にした。
   ( ryutamaki.hatenablog.com/entry/2014/01/18/171640 参照)

 googleドライブにて
  スプレッドシートを新規作成し、開く。
  ツール→スクリプトエディタにてgoogle apps scriptを記述する。( osak.in/web/271 参照 )
      function urlfetch(){
        var url = 'https://www.googleapis.com/customsearch/v1?key=xxx&cx=yyy&num=10&hl=ja&dateRestrict=d2&q=主要%20OR%20新着';
   // xxxはAPIキー、yyyはCustom Search ID
        var response = UrlFetchApp.fetch(url);
        var json = response.getContentText();
        var data = JSON.parse(json);
        // Logger.log(response);//ログに取得したデータを表示
        //ひとつめのタイトルの場合こんな感じ→ Logger.log(data.items[0].title);
        var fetchText = "";
        if (data.items) {
          for( var i=0 ; i < data.items.length; i++){
            fetchText = fetchText + data.items[i].title + "\n" + data.items[i].snippet + "\n\n";
          }
        }
      }

2016年12月25日日曜日

rsyslog ログファイル記録設定


2016 Jan. 04.
2016 Dec. 25.

/var/log内のログファイルに、サイズがゼロで所有権がroot:rootのものが多数あり。

/etc/rsyslog.conf に次の記述があり。
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog


ファイル所有権を変更して再起動し、ファイルサイズを確認するとsyslog, kern.logあたりは書き込まれるようになっていた。
# chown syslog:adm syslog kern.log user.log messages mail.warn mail.log mail.info mail.err lpr.log dpkg.log dmesg debug daemon.log bootstrap.log boot auth.log aptitude apport.log alternatives.log
# reboot
 $ ls -l syslog kern.log user.log messages mail.warn mail.log mail.info mail.err lpr.log dpkg.log dmesg debug daemon.log bootstrap.log boot auth.log aptitude apport.log alternatives.log
-rw-r--r-- 1 syslog adm      0  1月  1 06:07 alternatives.log
-rw-r----- 1 syslog adm      0 12月 19 05:08 apport.log
-rw-r--r-- 1 syslog adm      0  1月  1 06:07 aptitude
-rw-r--r-- 1 syslog adm   6347  1月  4 09:50 auth.log
-rw-r--r-- 1 syslog adm      0  4月 25  2016 boot
-rw-r--r-- 1 syslog adm      0  4月 25  2016 bootstrap.log
-rw-r--r-- 1 syslog adm      0  4月 25  2016 daemon.log
-rw-r--r-- 1 syslog adm      0  4月 25  2016 debug
-rw-r--r-- 1 syslog adm      0  4月 25  2016 dmesg
-rw-r--r-- 1 syslog adm      0  1月  1 06:07 dpkg.log
-rw-r--r-- 1 syslog adm 807528  1月  4 09:43 kern.log
-rw-r--r-- 1 syslog adm      0  4月 25  2016 lpr.log
-rw-r--r-- 1 syslog adm      0  4月 25  2016 mail.err
-rw-r--r-- 1 syslog adm      0  4月 25  2016 mail.info
-rw-r--r-- 1 syslog adm      0  4月 25  2016 mail.log
-rw-r--r-- 1 syslog adm      0  4月 25  2016 mail.warn
-rw-r--r-- 1 syslog adm      0  4月 25  2016 messages
-rw-r--r-- 1 syslog adm 355086  1月  4 09:50 syslog
-rw-r--r-- 1 syslog adm      0  4月 25  2016 user.log


/etc/rsyslog.d/50-default.conf でのログ記録設定
     kern.*               -/var/log/kern.log
     auth,authpriv.*  /var/log/auth.log

    ( http://vogel.at.webry.info/201311/article_4.html より)
      出力先ファイル名の先頭の - は、ログ出力時のディスクとの同期の抑制を指示します。
     通常、ログは出力されるとすぐにディスクと同期(ディスクに書き出される)しますが、大量にログを  出力する場合などでは書き込みに時間がかかってしまいます。
     ディスクとの同期を抑制すると、ログ書き出しで毎回ディスクと同期しないので、ログの出力速度は上がります。ただし、ディスクと同期する前に、電源が落ちたりするとログが消失する危険もあります。

2016年12月12日月曜日

LXDE起動時コマンド自動実行

basix3.0 64bit ubuntu16.04派生 linux
2016 Dec. 12.

${HOME}/.config/lxsession/LXDE/autostart に
@COMMAND (コマンドの直前に@を付ける)
の形式でコマンドを記述する。
 例) @recpt1 --b25 --strip --sid hd --http 8888 - /dev/null

NumLockを起動時に自動的にオンにする

basix3.0 64bit ubuntu16.04派生 linux lxde
2016 Dec. 11.

# aptitude install numlockx



2016年12月10日土曜日

SSHで1度入れたパスフレーズをその後は尋ねられないようにする

2016 Dec. 10.

qiita.com/naoki_mochizuki/items/93ee2643a4c6ab0a20f5
webos-goodies.jp/archives/50672669.html より


$ ssh-add (パスフレーズを尋ねられるので入力する)
$ ssh SERVER

SSH "Are you sure you want to continue connecting"表示をなくす


2016 Dec. 10.

d.hatena.ne.jp/yohei-a/20100214/1266112027 より

sshクライアント側の /etc/ssh/ssh_config のStrictHostKeyChecking設定をnoにする。(ask/yes/noを設定できる)
  StrictHostKeyChecking no

$ man ssh_config
...
     StrictHostKeyChecking
             If this flag is set to ``yes'', ssh(1) will never automatically
             add host keys to the ~/.ssh/known_hosts file, and refuses to con-
             nect to hosts whose host key has changed.  This provides maximum
             protection against trojan horse attacks, though it can be annoy-
             ing when the /etc/ssh_known_hosts file is poorly maintained or
             when connections to new hosts are frequently made.  This option
             forces the user to manually add all new hosts.  If this flag is
             set to ``no'', ssh will automatically add new host keys to the
             user known hosts files.  If this flag is set to ``ask'', new host
             keys will be added to the user known host files only after the
             user has confirmed that is what they really want to do, and ssh
             will refuse to connect to hosts whose host key has changed.  The
             host keys of known hosts will be verified automatically in all
             cases.  The argument must be ``yes'', ``no'', or ``ask''.  The
             default is ``ask''.

LXDEのパネルにアプリケーションを追加

LXDEのパネルにアプリケーションを追加

basix3.0 64bit ubuntu16.04派生 linux プログラムのlaunchパネルへの追加 アプリケーション起動ショートカット
2016 Dec. 10.


sites.google.com/site/hymd3a/linux/lxde より
パネルを右クリックして、「パネルのアイテムの追加・削除」をクリックする。(パネルの設定画面が表示される)
アプリケーション・ランチャーをダブルクリックする。あるいは、アプリケーション・ランチャーを選択し「設定」をクリックする。(アプリケーション・ランチャーが表示される)
右側の「インストールされているアプリケーション」欄から希望のアプリを左側の「ランチャ」欄に移す。

2016年12月3日土曜日

sshサーバ インストール


2019 Oct. 12.
2018 Sep. 01.
2017 Feb. 12.
2017 Feb. 11.
2016 Dec. 03.

鍵ファイルについて

公開鍵

ファイルパス SERVER: ~/.ssh/id_rsa.pub

サーバーの authorized_keys に追記したら以後不要なので削除する。

秘密鍵

ファイルパス CLEINT: ~/.ssh/id_rsa
 このファイル名を変更した場合は、ssh接続時に
  $ ssh –i ~/.ssh/CLIENT-FILE
 と -i オプションを付ける。

 known_hostsファイル

ファイル名  CLEINT: ~/.ssh/known_hosts
接続したことのあるSSHサーバ証明書が格納されるファイル。

暗号種類

現時点の高強度順
edf25519
ecdsa 521bit
ecdsa 384bit
ecdsa 256bit
rsa 4096bit

DSA  SSH2で使える。 鍵長が1024bit。
RSA1 非推奨。脆弱性があるSSH1で使える。

クライアントが利用できる暗号にする。

時とともに古い方式となるので、時々見直す。

鍵生成

$ ssh-keygen -t 暗号方式 -b bit長 -C "コメント" -f ファイル名 -P "パスフレーズ"
  -f:ファイル名には拡張子を付けない。秘密鍵と公開鍵のペアが作られる。

(例)
$ ssh-keygen -t ed25519
$ ssh-keygen -t ecdsa -b 521
$ ssh-keygen -t ecdsa -b 384
$ ssh-keygen -t ecdsa -b 256

$ ssh-keygen -t rsa -b 4096

失くした公開鍵復元
$ ssh-keygen -yf 秘密鍵名



インストール

# apt install ssh


/etc/ssh/sshd_config を編集
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile      %h/.ssh/authorized_keys
    AllowUsers USER
    PermitRootLogin no
    PermitEmptyPasswords no
    PasswordAuthentication no

/etc/hosts.allow を編集
    sshd: ALL

# ufw enable
# ufw allow 22/tcp
# ufw allow 22/udp
# ufw reload

サーバーの ~/.ssh 内に公開鍵を配置する。
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ rm ~/.ssh/id_rsa.pub
  $ chmod 750 ~/
  $ chmod 700 ~/.ssh
  $ chmod 600 id_rsa authorized_keys

id_rsa をクライアントの各ソフトに合致する場所に置く。
 linuxならば ~/.ssh/ に。
  クライアント設定
   /etc/ssh/ssh_config
    RSAAuthentication yes
    IdentityFile ~/.ssh/id_rsa

 connect botならばSDカード内の任意のフォルダに。
  connect botの鍵設定は fnya.cocolog-nifty.com/blog/2012/03/connectbot-andr.html を参照。

# systemctl restart sshd

2016年11月26日土曜日

epgrec UNA インストール

2019 Nov. 02.
2019 Oct. 22.
2019 Oct. 20.
2019 Oct. 17.
2018 Sep. 15.
2018 Sep. 09.
2018 Sep. 08.
2017 Feb. 05.
2016 Nov. 26.

pt2, recpt1をインストール


FFMPEG インストール

# apt install ffmpeg

httpサーバー、mysql、phpをインストール

nginx + mysql + php こちらのページを参照

lampインストール
  # tasksel
      lamp を選択してapache2 mysql phpをインストール

atをインストール

# apt install at

ユーザー設定等

/etc/group に www-dataがなければ追加する

/etc/at.deny から www-data を削除する

  # sed -i 's/www-data//g' /etc/at.deny

www-dataのログインシェルを(/usr/sbin/nologin から)/bin/bash にする
 

PHP設定

関連パッケージインストール
 PHP6以前
      # apt  install php-mbstring php-xml

 PHP7
      # apt  install php-mbstring php-xml php7.2-mysql

php.inoファイルの編集
     Apacheで動くPHPの php.ini は /etc/phpDIR/apache2/php.ini にある。
     コマンドラインで動くPHPの php.ini は /etc/phpDIR/cli/php.ini にある。
  FastCGI版の PHPの php.ini は /etc/phpDIR/fpm/php.ini にある。


  php.ini のパスの確認
    次の1行の内容の/var/www/html/phpinfo.phpファイルを作成する
      <?php phpinfo(); ?>

    http://EPGREC-SERVER/phpinfo.php でPHPの設定状況を表示し、
    php.iniのパスを確認する。
     Loaded Configuration File  /etc/php/PATH/php.ini

  /etc/php/PATH/php.ini を編集する
    php.ini の disable_functionsを無効にする。
      ;disable_functions =
      (行頭にセミコロンを付けるとコメント行になる) 


    php.ini の timezoneを"Asia/Tokyo"に設定する。
        ( hydrocul.github.io/wiki/blog/2013/0625-php-ini-location-ubuntu.html )
      ;date.timezone =       設定前
      date.timezone = "Asia/Tokyo" 設定後

# service  php-fpm restart
# service HTTP-SERVER restart

mysql設定

sql-modeの指定をしない(strict制約をしない)。sql_mode=''
・書き出し先ディレクトリ制約をしない。secure-file-priv = ""
 
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 ↓
[mysqld]
sql_mode=''
secure-file-priv = ""


# systemctl restart mysql.service


epgrecデータベース作成

  $ mysql -p -u root
  mysql> create database epgrec_una;
  mysql> grant all on epgrec_una.* to epgrec_una@"%" identified by 'パスワード';
  mysql> grant file on *.* to epgrec_una@"%" IDENTIFIED BY 'パスワード';
  mysql> flush privileges;
  mysql> quit

epgrec UNA用epgdump インストール

epgrec UNA用epgdump ダウンロード
 epgrec UNA用epgdump 160127版 www1.axfc.net/u/3608680?key=UNAUNA

$ cd YOUR/DOWNLOAD/DIR
$ tar zvxf epgdumpUNA160127.tar.gz
$ cd epgdump
$ make
$ sudo  make install
 

確認
 recpt1から出力したTSファイルから番組表を取得
 (16はチャンネル番号なので適当に。100は録画秒数)
    $ recpt1 --b25 --strip 16 100 16.ts
    $ epgdump 16 16.ts tv16.xml -xml
 xmlファイルの作成を確認
    $ cat tv16.xml

epgrec UNA インストール 

( http://d.hatena.ne.jp/katauna/ より)
ファイルダウンロード
  • epgrecUNA 人柱版(2015/11/14)
  • epgrecUNA 151114版用 fix1
  • epgrecUNA 151114版用 fix2
  • 地震テロップ対応ファイル

 ダウンロード時に必要なキーワードは4ファイルとも同じ。
 全角で○○○(天△△との食べxxxの「○○○」)


epgrecUNA 人柱版(2015/11/14)
http://d.hatena.ne.jp/katauna/touch/20151114/1447500516
から
https://www1.axfc.net/u/3566746
に遷移し、キーワード ○○○ として
3566746.gz(epgrecUNA_151114.tar.gz)
をダウンロードする

epgrecUNA 151114版用 fix1
http://d.hatena.ne.jp/katauna/touch/20151205/1449313773
から
https://www1.axfc.net/u/3578126
に遷移し、キーワード ○○○ として
3578126.gz(epgrecUNA151114Fix1.tar.gz)
をダウンロードする


epgrecUNA 151114版用 fix2
http://d.hatena.ne.jp/katauna/touch/20160411/1460383655
から
https://www1.axfc.net/u/3650284
に遷移し、キーワード ○○○ として
3650284.gz(epgrecUNA151114Fix2.tar.gz)
をダウンロードする


地震テロップ対応ファイル
http://d.hatena.ne.jp/katauna/touch/20160425/1461516298
から
http://www1.axfc.net/u/3658547
へ遷移し、キーワード ○○○ としてダウンロード
3658547.gz(quake_alert_fix1.tar.gz)
をダウンロードする

インストール

(1)epgrecUNA_151114.tar.gz、epgrecUNA151114Fix1.tar.gz、epgrecUNA151114Fix2.tar.gz を同じディレクトリに置く

(2)tar.gzファイルを 同じディレクトリで順次解凍する
  $ cd DIR
  $ tar -zxvf epgrecUNA_151114.tar.gz
  $ tar -zxvf epgrecUNA151114Fix1.tar.gz
  $ tar -zxvf epgrecUNA151114Fix2.tar.gz
 
(3)地震テロップ対応
  quake_alert_fix1.tar.gzを任意のディレクトリに置く
  quake_alert_fix1.tar.gzを解凍する
   $ cd QUAKE-DIR
   $ tar -zxvf quake_alert_fix1.tar.gz
      recomplete.phpが取り出される
 
  recomplete.phpの17行目を適切な地域名に変更する。

  recomplete.phpをepgrecフォルダに置く(既存ファイルと入れ替える)
   $ mv QUAKE-DIR/recomplete.php /DIR/epgrec/recomplete.php
 
(4)do-record.shを自分用に編集する(そのまま利用してもよい)
  $ cp -p do-record.sh.sample do-record.sh
    do-record.shを編集する。 

(5)templates/programTable.html を修正する
  ( eco.senritu.net/ubuntu16-04-lts_epgrec_una_setup/ より)
    --- templates/programTable.html.original 2017-02-11 07:56:46.621185357 +0900
    +++ templates/programTable.html 2017-02-11 08:02:42.645249529 +0900
    @@ -663,7 +663,7 @@
     {/if}
     {if $prg_cnt >= 300}<div>表示最大300件まで</div>{/if}
     {if $do_keyword}
    -{if $k_category != 15 || $k_sub_genre>=0x3f }
    +{if $k_category != 15 || $k_sub_genre>=63 }
     {if $do_keyword || $prg_cnt < 300}
     <div>
     <fieldset>
    @@ -676,7 +676,7 @@
       <b> 局:</b>{$k_station_name}
       <b> ジャンル({if $first_genre == 1}第一{else}全保持{/if}):</b>{if $k_category == 0}すべて{else}{$k_category_name}{/if}
       <b>サブジャンル:</b><script type="text/javascript">sub_genre_view({$k_category}, {$k_sub_genre});</script>
    -  <b> 曜日:</b>{if $weekofday == 0x7f}なし{else}{$wds_name}{/if}
    +  <b> 曜日:</b>{if $weekofday == 127}なし{else}{$wds_name}{/if}
       <b> 時間帯:</b>{if $prgtime == 24}なし{else}{$prgtime}時から{$period}時間{/if}
       <b> 件数:</b>{$prg_cnt}<br>
     </fieldset>

(6)config.phpの編集
  地上デジタルチャンネルマップを設定

    -define( "TUNER_UNIT1", 0 );
      // 第一チューナーの各放送波の論理チューナ数(地上波・衛星波で共用 ex.PT1が1枚なら2)
    +define( "TUNER_UNIT1", 2 );
      // 第一チューナーの各放送波の論理チューナ数(地上波・衛星波で共用 ex.PT1が1枚なら2)


  その他はデフォルトでも動く。


(7)BSチャンネル情報を修正
        $ vi settings/bs_channnel.php
  不要なチャンネルはコメントアウトするのではなく、ハッシュの値( => の右値)を "NC" にする。

(8)epgrecフォルダをhttpサーバードキュメントルートにコピーする
        $ sudo cp -a DIR/epgrec/* /var/www/html/epgrec_una/
    $  sudo chown -R www-data:www-data /var/www/html/epgrec_una

(9)ファイル属性を設定する
  # su - www-data
  $ cd /var/www/html/epgrec_una
  $ chmod 777 cache templates_c video thumbs settings
  $ chmod 666 thumbs/index.html video/index.html
  $ chmod 755 do-record.sh
 
(10)videoディレクトリを自分用に設定する

初期設定

  http://localhost/epgrec_una/ にアクセスして設定。

番組情報取得cron設定

  # cp /var/www/html/epgrec_una/cron.d/shepherd /etc/cron.d/

  /etc/cron.d/shepherd を編集
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    29 */2 * * *   www-data /mnt/apache/epgrec/shepherd.php

epgrec UNAの再初期設定

mysql上のデータベースを削除し、再作成する。
 settings/config.xml を削除する。
 settings/bs_channnel.php を再設定する。
 http://localhost/epgrec_una/ にアクセスして再設定する。


epgrec UNAはデフォルトでは127.0.0.1と192.168.0.0/16以外からの設定変更は拒否するようになっている(config.phpのSETTING_CHANGE_GIP)

do-record.shのテスト。
$ OUTPUT=test.ts CHANNEL=14 DURATION=30 TUNER=0
TUNER_UNIT=2 MODE=0 TYPE=GR /var/www/epgrec/do-record.sh

2016年11月20日日曜日

basix3.0インストール

basix3.0インストール

basix3.0 64bit ubuntu16.04派生 linux
2016 Nov. 26.
2016 Nov. 23.
2016 Nov. 20.

LiveCDでのパソコン起動時画面からのダイレクトインストールではインストールが進まない。
LiveCDからBasixを起動してからインストールするとうまくいく。

「インストール中にアップデートをダウンロードする」の画面から先に進まないこと多いが、終了ボタンを押してインストールを最初からやり直すと正常に進む。

プリンタコマンド lpとlprの違い

プリンタコマンド lpとlprの違い

印刷 プリント ubuntu14.04 32bit linux
2016 Nov. 20.

( sh1m4book.hatenablog.jp/entry/2015/06/29/004146 より)
Systemv系ではlpコマンド。
BSD系のシステムではlprコマンド。

ubuntu14.04 linux 32bit では
$ ls -l /usr/bin/lp
-rwxr-xr-x 1 root root 13672 12月  12  2015 /usr/bin/lp

$ ls -l /usr/bin/lpr
-rwxr-xr-x 1 root root 13672 12月  12  2015 /usr/bin/lpr

cupsデフォルトプリンタ設定

cupsデフォルトプリンタ設定

印刷 ubuntu14.04LTS 32bit
2016 Nov. 20.

利用可能なプリンタ名を一覧表示

( vinelinux.org/docs/vine6/cui-guide/vine-cups.html より)
$ lpstat -d -p
プリンター DCPJ562Nは待機中です。2016年11月20日08時40分32秒以来有効です


デフォルトプリンタを設定

( docs.oracle.com/cd/E26924_01/html/E25810/gllgm.html より)
# lpoptions -d  DCPJ562N

(一般ユーザで)確認

$ lpstat -d -p
システムのデフォルトの宛先 :  DCPJ562N
プリンター DCPJ562Nは待機中です。2016年11月20日08時40分32秒以来有効です

# reboot
$ lpstat -d -p
システムのデフォルトの宛先 :  DCPJ562N
プリンター DCPJ562Nは待機中です。2016年11月20日08時40分32秒以来有効です

英数字テキストファイル印刷

$ cat TEXT-FILE | lpr

2016年11月18日金曜日

正しいパスワードを入力してもX Window ( Desktop )にログインできない時の対処

2016 Nov. 18.
# aptitude install bumblebee bumblebee-nvidia primus
  ( wiki.ubuntu.com/Bumblebee より)

      linux-headers-genericもインストールするように書かれているが、依存関係でlinux-headers-generic-paeが削除されるので、インストールをやめておいた。

東芝テレビ32H3000をミニD-sub15ピン端子でPCに接続した時のターミナル画面(X Window非起動時画面)の表示

東芝テレビregza 32H3000をミニD-sub15ピン端子でPCに接続した時のターミナル画面(X Window非起動時画面)の表示

ubuntu14.04LTS 32bit linux
2018 Feb. 10.
2016 Nov. 18.

結論 ( linux.kororo.jp/cont/tips/console_vga.php より)


boot時のkernelへの引数に "vga=792" を 与える。
    771: 800x600 8bit color
    773: 1024x768 8bit color
    788: 800x600 16bit color
    791: 1024x768 16bit color
    789: 800x600 /24bit color
    792: 1024x768/24bit color

手法( www.usupi.org/sysad/202.html より)

(1) /etc/default/grub に以下の設定を記載する。
        GRUB_CMDLINE_LINUX="vga=792"

(2) # update-grub2

2016年11月13日日曜日

rmコマンドでの削除ファイルを復元するextundeleteの利用

rmコマンドでの削除ファイルを復元するextundeleteの利用
ubuntu14.04 32bit linux
2016 Nov. 18.
2016 Nov. 14.
2016 Nov. 13.

復元ファイルは元のディレクトリではなく、自動的に作成されるカレントディレクトリ内のRECOVERED_FILESディレクトリ内に置かれる。
カレントディレクトリには復元ファイルを保管できる空き容量が必要。

Brother DCP-J562N 印刷設定 ネットワークプリンタサーバインストール

Brother DCP-J562N 印刷設定 ネットワークプリンタサーバインストール

basix3.0 64bit, ubuntu16.04派生, linux, cups, network printer, 印刷, プリンタ
2019 Oct. 14.
2017 Nov. 19.
2016 Nov. 18.
2016 Nov. 13.

https://rokkonet.blogspot.com/2017/11/brother-printer-scanner-dcp.html 参照方


<以下は不要>
note.kurodigi.com/post-0-30/ より
    “/var/spool/lpd”フォルダ及び
    “/usr/share/cups/model” フォルダ
    が存在しない場合はフォルダを作成する。

    # aptitude install apparmor-utils (ubuntu系の場合のみ)
    # aa-complain cupsd (ubuntu系の場合のみ)

    32bitライブラリをインストール(64bit linuxの場合)
        $ sudo apt-get install lib32stdc++6

    ”/usr/lib/cups/filter”フォルダがあることを確認し、存在しない場合は作成する

    solutions.brother.co.jp/support/os/linux/lpr_printer/driver.html からドライバをダウンロードする。

        cpj525nlpr-3.0.1-1.i386.deb
        dcpj525ncupswrapper-3.0.0-1.i386.deb

    # dpkg -i --force-all ./dcpj562nlpr-1.0.0-0.i386.deb
    # dpkg -i --force-all ./dcpj562ncupswrapper-1.0.0-0.i386.deb

    lpadmin groupにユーザーを登録する

 プリンタサーバのurlを取得しておく。
      例 http://PRINT-SERVER:631/printers/DCPJ562N

プリンタのcups定義ppdファイルを保管しておく。
      例 /usr/share/ppd/Brother/brother_dcpj562n_printer_en.ppd

クライアント となるbaxix3.0のメニューからプリンター設定を開き、プリンタの追加ウィザードを進める。
  プリンタサーバのurlのプロトコルは ipp:// にする。
     ipp://PRINT-SERVER:631/printers/DCPJ562N

2016年11月6日日曜日

radiko録音 シェル・スクリプト radiko仕様変更対応

radiko録音 シェル・スクリプト radiko仕様変更対応

xubuntu16.04 64bit, ubuntu16.04派生, ubuntu14.04LTS 32bit, linux, swftools, libxml2-utils, rtmpdump
2019 May 16.
2018 May  03.
2016 Nov. 06.

ライブラリインストール

  # aptitude  install swftools libxml2-utils rtmpdump

録音スクリプト

( www.lifewithunix.jp/notes/2016/10/22/radiko-recording-script-for-freebsd-updated/ より)
( www.lifewithunix.jp/notes/wp-content/uploads/2016/10/radiko2016oct_sh.txt より)

rtmpdumpは同時の複数プロセス実行可能(同時複数番組録音可能)

[rec_radiko.sh]

#!/bin/bash

  # set variables
  pid=$$
  date=`date '+%Y-%m-%d-%H:%M'`
  radiodate=`TZ=RST-9 date +%Y%m%d%H%M`
  playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf
  playerfile="/tmp/player.swf"
  keyfile="/tmp/authkey.png"

  cmdname=`basename $0`
 
  DURATION='2'
  outdir="./"
  channel1='FMO'
  channel2='FMT'
  channel3='HFM'

  if [ $# -eq 3 ]; then
    DURATION=`expr $1 \* 60`
    outdir=$2
    channel1=$3
    channel2=$3
    channel3=$3
  elif [ $# -eq 4 ]; then
    DURATION=`expr $1 \* 60`
    outdir=$2
    channel1=$3
    channel2=$4
    channel3=$4
  elif [ $# -eq 5 ]; then
    DURATION=`expr $1 \* 60`
    outdir=$2
    channel1=$3
    channel2=$4
    channel3=$5
  else
    echo "usage : $cmdname duration(minuites) output-directory channel1 [channel2 channel3]" >&2
    exit 1
  fi

  if [ ! -d "${outdir}" ]; then
    echo "${outdir} does not exist." >&2
    exit 1
  fi
  outdir="${outdir%/}"

#####################
# function                              #
#   prepare for rtmpdump  #
#####################
function prepareRtmpdump(){
  # Syntax: prepareRtmpdump CHANNEL PID DATE RADIODATE PLAYERURL PLAYERFILE KEYFILE

  local channel=$1
  local pid=$2
  local date=$3
  local radiodate=$4
  local playerurl=$5
  local playerfile=$6
  local keyfile=$7

  #
  # get player
  #
  if [ ! -f $playerfile ]; then
    wget -q -O $playerfile $playerurl
 
    if [ $? -ne 0 ]; then
      echo "failed get player" >&2
      exit 1
    fi
  fi
 

  echo 'Got player' >&2

  #
  # get keydata (need swftool)
  #
  if [ ! -f $keyfile ]; then
    # swfextract -b 14 $playerfile -o $keyfile
    swfextract -b 12 $playerfile -o $keyfile
 
    if [ ! -f $keyfile ]; then
      echo "failed get keydata" >&2
      exit 1
    fi
  fi

  if [ -f auth1_fms_${pid} ]; then
    rm -f auth1_fms_${pid}
  fi
 
  echo 'Got keydata' >&2

  #
  # access auth1_fms
  #
  wget -q \
       --header="pragma: no-cache" \
       --header="X-Radiko-App: pc_ts" \
       --header="X-Radiko-App-Version: 4.0.0" \
       --header="X-Radiko-User: test-stream" \
       --header="X-Radiko-Device: pc" \
       --post-data='\r\n' \
       --no-check-certificate \
       --save-headers \
       -O auth1_fms_${pid} \
       https://radiko.jp/v2/api/auth1_fms
 
  if [ $? -ne 0 ]; then
    echo "failed auth1 process" >&2
    exit 1
  fi

  echo 'Accessed auth1_fms' >&2

  #
  # get partial key
  #
  authtoken=`perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)' auth1_fms_${pid}`
  offset=`perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)' auth1_fms_${pid}`
  length=`perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)' auth1_fms_${pid}`
 
  partialkey=`dd if=$keyfile bs=1 skip=${offset} count=${length} 2> /dev/null | base64`
 
  echo "authtoken: ${authtoken} \noffset: ${offset} length: ${length} \npartialkey: $partialkey"

 
  rm -f auth1_fms_${pid}
 
  if [ -f auth2_fms_${pid} ]; then
    rm -f auth2_fms_${pid}
  fi
 
  echo 'Got partial key' >&2

  #
  # access auth2_fms
  #
  wget -q \
    --header="pragma: no-cache" \
    --header="X-Radiko-App: pc_ts" \
    --header="X-Radiko-App-Version: 4.0.0" \
    --header="X-Radiko-User: test-stream" \
    --header="X-Radiko-Device: pc" \
    --header="X-Radiko-Authtoken: ${authtoken}" \
    --header="X-Radiko-Partialkey: ${partialkey}" \
    --post-data='\r\n' \
    --no-check-certificate \
    https://radiko.jp/v2/api/auth2_fms

  if [ $? -ne 0 -o ! -f auth2_fms ]; then
    echo "failed auth2 process"
    exit 1
  fi
 
  echo 'Accessed auth2_fms' >&2
  echo "authentication success" >&2
 
  areaid=`perl -ne 'print $1 if(/^([^,]+),/i)' auth2_fms_${pid}`
  echo "areaid: $areaid" >&2
 
  rm -f auth2_fms_${pid}
 
  #
  # get stream-url
  #
 
  if [ -f ${channel}.xml ]; then
    rm -f ${channel}.xml
  fi
 
  wget -q "http://radiko.jp/v2/station/stream/${channel}.xml"
 
  stream_url=`echo "cat /url/item[1]/text()" | xmllint --shell ${channel}.xml | tail -2 | head -1`
  url_parts=(`echo ${stream_url} | perl -pe 's!^(.*)://(.*?)/(.*)/(.*?)$/!$1://$2 $3 $4!'`)
 
  rm -f ${channel}.xml

  echo 'Got stream-url' >&2
}


#######
# main  #
# main  #
#######
#
# check 1st channel
#
channel=${channel1}
prepareRtmpdump $channel1 $pid $date $radiodate $playerurl $playerfile $keyfile

#
# check "ERROR: " in output of 1st channel rtmpdump.
#
rtmpdump -v \
         -r ${url_parts[0]} \
         --app ${url_parts[1]} \
         --playpath ${url_parts[2]} \
         -W $playerurl \
         -C S:"" -C S:"" -C S:"" -C S:$authtoken \
         --live \
         --stop 5\
         --flv "/tmp/${radiodate}${channel1}" \
         2> /tmp/${radiodate}${channel1}.log

grep -q 'ERROR: ' /tmp/${radiodate}${channel1}.log

# in case of outside of channel1 area
if [ $? -eq 0 ]; then
  echo "Cannot find channel: ${channel1}" >&2

  # check variable channel2 definition
  if [ -z "${channel2+x}" ] ; then
    echo "no variable: channel2" >&2
    exit 1
  fi

  #
  # check 2nd channel
  #
  channel=${channel2}
  prepareRtmpdump $channel2 $pid $date $radiodate $playerurl $playerfile $keyfile

  #
  # check "ERROR: " in output of 2nd channel rtmpdump.
  #
  rtmpdump -v \
           -r ${url_parts[0]} \
           --app ${url_parts[1]} \
           --playpath ${url_parts[2]} \
           -W $playerurl \
           -C S:"" -C S:"" -C S:"" -C S:$authtoken \
           --live \
           --stop 5\
           --flv "/tmp/${radiodate}${channel2}" \
           2> /tmp/${radiodate}${channel2}.log

  grep -q 'ERROR: ' /tmp/${radiodate}${channel2}.log

  # in case of outside of channel2 area
  if [ $? -eq 0 ]; then
    echo "Cannot find channel: ${channel2}" >&2

    # check variable channel3 definition
    if [ -z "${channel3+x}" ] ; then
      echo "no variable: channel3" >&2
      exit 1
    fi

    #
    # check 3rd channel
    #
    channel=${channel3}
    prepareRtmpdump $channel3 $pid $date $radiodate $playerurl $playerfile $keyfile

    #
    # check "ERROR: " in output of 3rd channel rtmpdump.
    #
    rtmpdump -v \
             -r ${url_parts[0]} \
             --app ${url_parts[1]} \
             --playpath ${url_parts[2]} \
             -W $playerurl \
             -C S:"" -C S:"" -C S:"" -C S:$authtoken \
             --live \
             --stop 5\
             --flv "/tmp/${radiodate}${channel3}" \
             2> /tmp/${radiodate}${channel3}.log

    grep -q 'ERROR: ' /tmp/${radiodate}${channel3}.log
    if [ $? -eq 0 ]; then
      echo "Cannot find channel: ${channel3}" >&2
      exit 1
    fi
  fi
fi

#
# recording
#
echo "Recording ${channel}..." >&2
prepareRtmpdump $channel $pid $date $radiodate $playerurl $playerfile $keyfile
rtmpdump -v \
         -r ${url_parts[0]} \
         --app ${url_parts[1]} \
         --playpath ${url_parts[2]} \
         -W $playerurl \
         -C S:"" -C S:"" -C S:"" -C S:$authtoken \
         --live \
         --stop ${DURATION} \
         --flv "${outdir}/${radiodate}${channel}.m4a"

exit 0


[rec_some-program.sh]

#!/bin/sh

# shell script for recording radiko through ethernet-lan
# Sunday 14:00-15:55 FM-Osaka

SCRIPTLOG="${HOME}/var/log/rec-some-program4lan.log"
duration='55'
  # duration unit : minute
dstdir='radio/recorded/'
channel1='FMO'
channel2='FMT'
channel3='HFM'

# Set IP-address to which is sent test-ICMP-packet.
DEST_ADDRESS='www.yahoo.co.jp'

#####################
# function                              #
#   check LAN connection  #
#####################
check_lan() {
  mes_stdout=`ping -c 1 $DEST_ADDRESS`
  echo $mes_stdout | grep 'received, 0% packet loss' | grep -q -v 'grep'
  if [ $? -eq 0 ]; then
    echo 'LAN connected.' >> ${SCRIPTLOG}
    return 1
  else
    echo 'LAN not connected.' >> ${SCRIPTLOG}
    return 2
  fi
}


###############
## main routine  ##
## main routine  ##
###############

echo        >> ${SCRIPTLOG}
echo `date` >> ${SCRIPTLOG}

# check internet-connection
check_lan_result=0
cnt_try_connect=0
until [ $check_lan_result -eq 1 ]
do
  if [ ${cnt_try_connect} -gt 3 ]; then
    echo 'No internet connection. Abort.' >> ${SCRIPTLOG}
    exit 1
  fi
  check_lan
  check_lan_result=$?

  if [ ${check_lan_result} -ne 1 ]; then
    cnt_try_connect=`expr $cnt_try_connect + 1`
  fi
done

sleep 35s

rec_radiko.sh $duration $dstdir $channel1 $channel2 $channel3 2>> ${SCRIPTLOG}

TV受信 pt2 recpt1 インストール

2019 Nov. 03.
2019 Oct. 27.
2019 Oct. 12.
2019 Apr. 27.
2018 Sep. 04.
2018 Aug. 14.
2018 May 24.
2017 Jan. 15.
2016 Nov. 06.

https://tech.nosuz.jp/2016/05/record-braodcast-by-pt2/#pt2_config より

準備

チューナーカード pt2
ICカードリーダー SCR3310-NTTCom
B-CASカード
TVアンテナ信号分波器
TVアンテナ信号分配器
同軸ケーブル

pt2装着確認

$ lspci
  "01:0a.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)"を確認

PT2への信号入力(ケーブル接続)

地上波・BS波混合信号を分波器で地上波とBS波に分ける。
分離した地上波とBS波のそれぞれを分配器で必要な数(PT2、テレビ、録画機等)に分けて、それぞれを接続する。
少なくとも、PT2用に地上波を2つ、BS波を2つに分配する必要があり、その場合、2分配器が2個必要となる。
分波器を経由せず、分配器だけでも機能するが信号が弱くなって映像が不良となる恐れがある。

pcscカードリーダドライバ インストール

 $ sudo aptitude install pcscd pcsc-tools libccid libpcsclite1 libpcsclite-dev
$ pcsc_scan
    "Japanese Chijou Digital B-CAS Card"を確認し ctrl+c

    PT2アンテナ端子配置
  S1 BS (PCケース上蓋側)
  T1 地上
  S2 BS
  T2 地上 (マザーボード側)

 

 PT2ドライバ インストール

$ sudo aptitude install gcc libelf-dev

$ lsmod | grep earth_pt1
    earth_pt1
    dvb_core

$ sudo rmmod earth_pt1
$sudo echo -e "\n# for pt2-character-device install\nblacklist earth_pt1" >> /etc/modprobe.d/blacklist.conf

hg.honeyplanet.jp/pt1/ から最新版recpt1を入手する。
  $ wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
$ tar axvf tip.tar.bz2
$ cd pt1-xxxxxxxx/driver

アンテナへの電源供給設定
pt1_pci.c のlnb値設定を
電源不要(マンションケーブル等)なら 0
パラボラアンテナなら1もしくは2
にする
static int lnb = 0; /* LNB OFF:0 +11V:1 +15V:2 */


( $ make clean )
$ make
$ sudo make install
$ sudo modprobe pt1_drv
$ ls -l /dev/pt1*
  crw-rw-rw- 1 root video 245, 0 11月  6 16:40 /dev/pt1video0
  crw-rw-rw- 1 root video 245, 1 11月  6 16:40 /dev/pt1video1
  crw-rw-rw- 1 root video 245, 2 11月  6 16:40 /dev/pt1video2
  crw-rw-rw- 1 root video 245, 3 11月  6 16:40 /dev/pt1video3

$ sudo vim /etc/group
   videoグループにpt2利用ユーザを追加。

 

 ドライバの削除と組み込み

# rmmod pt1_drv
# modprobe pt1_drv

録画ソフトrecpt1インストール

 

 arib-b25インストール

$ sudo aptitude install zip pkg-config libpcsclite-dev pkg-config
$ wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
$ unzip c44e16dbb0e2.zip
$ cd pt1-c44e16dbb0e2/arib2
( $ make clean )
$ make
$ sudo make install

recpt1(httpサーバー版)インストール

$ sudo aptitude install autoconf automake

(d.hatena.ne.jp/katauna/20160123/1453544494 より)
http://www1.axfc.net/u/3606217?key=UNAUNA から httpサーバー版パッチをダウンロードする。
得られた recpt1-http.diff ファイルをドライバインストールの時の c8688d7d6382/recpt1/ に置く。

  $ cd c8688d7d6382/recpt1/
  $ patch < recpt1-http.diff
          --- pt1-c8688d7d6382/recpt1/Makefile.in 2013-10-01 16:36:12.000000000 +0900
          +++ V4/recpt1/Makefile.in       2016-01-23 21:00:00.000000000 +0900
          @@ -7,7 +7,8 @@
          TARGET = recpt1
          TARGET2 = recpt1ctl
          TARGET3 = checksignal
          -TARGETS = $(TARGET) $(TARGET2) $(TARGET3)
          +TARGET4 = tssplitter_lite
          +TARGETS = $(TARGET) $(TARGET2) $(TARGET3) $(TARGET4)
          RELEASE_VERSION = "1.2.0"
          etc...

4k, 8k 放送開始対応のコード修正(BS103受信対策)

pt1_dev.hとrecpt1core.cを下記サイトに従って修正する。
   https://qiita.com/amori/items/acaf7a2b7db7f318c3b8
   http://hg.honeyplanet.jp/pt1/
   http://hg.honeyplanet.jp/pt1/rev/5e4290a4cd01
   http://hg.honeyplanet.jp/pt1/rev/75423932bfaa
   http://hg.honeyplanet.jp/pt1/rev/42f838632c32

インストール

  ( $ make clean )
  $ ./autogen.sh
  $ ./configure --enable-b25
  $ make
  $ sudo make install
  $ checksignal 14    // 14 はチャンネル番号
       device = /dev/pt1video2
       C/N = 32.969146dB

  信号受信を確認し ctrl+c

地上波ディタル放送録画
  $ recpt1 --b25 --strip --sid hd 14 15 tv14.ts

動画閲覧
  $ vlc tv14.ts

BS放送録画
  $ recpt1 --b25 --strip --sid hd 103 15 tv103.ts

動画閲覧
  $ vlc tv103.ts

recpt1 + vlc でリアルタイム視聴

recpt1を起動し、次にvlcを起動する。
  $ recpt1 --b25 --strip --sid hd --http 8888 - /dev/null

  vlcを起動し、「ファイル」→「ネットワークストリームを開く」でネットワークアドレスに
  http://127.0.0.1:8888/xx (xxは地デジのチャンネル)
  を入力すると映像が表示される。
  「ツール」→「設定」→「ビデオ」から、デフォルトのデインターレースモードを「自動」にしておく。

  recpt1の終了は ctrl + c

2016年11月5日土曜日

画面解像度1360x768の追加

 画面解像度1360x768の追加

xubuntu18.04 basix3.0 64bit xubuntu16.04 64bit ubuntu16.04派生  linux FreeBSD 11.0
2018 Jul. 28.

2017 May. 07.
2017 Jan. 08.
2016 Nov. 26.
2016 Nov. 05.

手法1

希望解像度データ取得〜解像度一時変更

(basix3.0, xubuntu16.04共通)

sites.google.com/site/lubuntulearning/lubuntu-setting/display
wiki.archlinuxjp.org/index.php/Xrandr
より

希望解像度の Modeline を取得


$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096
VGA-1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00*
   800x600       60.32    56.25 
   848x480       60.00 
   640x480       59.94 

$ cvt 1360 768
# 1360x768 59.80 Hz (CVT) hsync: 47.72 kHz; pclk: 84.75 MHz
Modeline "1360x768_60.00"   84.75  1360 1432 1568 1776  768 771 781 798 -hsync +vsync

新しい xrandr のモードを作成

$ xrandr --newmode "1360x768_60.00"   84.75  1360 1432 1568 1776  768 771 781 798 -hsync +vsync

新しいモードを現在の出力 (VGA-1) に追加

$ xrandr --addmode VGA-1 1360x768_60.00

画面の解像度を追加した解像度に変更
$ xrandr --output VGA-1 --mode 1360x768_60.00

初期解像度の1360x768への変更

  basix3.0, xubuntu16.04共通

  •  add-display-resolution.sh を新規作成
    /usr/bin/xrandr --newmode "1360x768_60.00"   84.75  1360 1432 1568 1776  768 771 781 798 -hsync +vsync
    /usr/bin/xrandr --addmode VGA-1 1360x768_60.00
    /usr/bin/xrandr --output VGA-1 --mode 1360x768_60.00
  • 実行権を付与
    $ sudo chmod +x add-display-resolution.sh
  • デスクトップ起動時実行設定するか、もしくは /etc/profile.d/ に入れて起動時実行にする。

  basix3.0

  • /etc/lightdm/lightdm.confを修正。
       [SeatDefaults]セクションに次の1行を追記
    display-setup-script=PATH/TO/add-display-resolution.sh

  xubuntu14.04

~/.bashrc に
PATH/TO/add-display-resolution.sh
を記載。
  xfceデスクトップ上でターミナルを開いた瞬間に画面解像度が変わる。

  /etc/lightdm/lightdm.conf、lightdm-gtk-greeter.conf への記載では解像度変わらず。
  デスクトップの「セッションと起動」設定で add-display-resolution.sh を自動起動設定しても解像度変わらず。

手法2

( bbs.archlinux.org/viewtopic.php?id=114933 より)
  $ xrandr --output VGA-1 --scale 1.3x1.4
  1.3: x方向の解像度拡大率
  1.4: y方向の解像度拡大率

rootのcrontabの書式

basix3.0 64bit ubuntu16.04派生 linux
2016 Nov. 18.
2016 Nov. 07.
2016 Nov. 05.



rootのcrontabに
@reboot USER COMMAND
と書いていたら動かない。
@reboot COMMAND
が正解。