08月≪ 123456789101112131415161718192021222324252627282930≫10月

スポンサーサイト

--/--/--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--:-- スポンサー広告

Firefoxやgeditから印刷ができない

2017/08/04
macOSをめったに起動しなくなったので,Macintosh HDを200Gに減らして,あと全部をarchlinuxに割り当てようと思ったのですが,いろいろ面倒くさそうだったので,再インストールしました。

しかし,ふと気がつくとFirefoxのプリントダイアログがプリンタを認識しておらず,印刷ができず・・・。いろいろ調べたのですが,さっぱり原因がわからず・・・。なぜだっ!なぜなんだっ!メールクライアントはFirefox上のGmailを使っているので,メールが印刷できなくて困っておりました。一旦PDFに出力してから印刷とかいう手間が。まぁ大した手間ではないですが。

しかし,本日,ふとgeditからメモを印刷しようとしたら,geditの印刷ダイアログにもプリンタが出てこず。ん!?

これはGTKアプリケーションの問題か?

どうもFirefoxもGTKのようで,GTKアプリケーションとプリンタで検索したら,さっそくプリンタがアプリケーションに認識されていない原因が判明。

GTK 印刷ダイアログでプリンターが表示されない
GTK 3.22 以降では、GTK の印刷ダイアログでプリンターのリストを表示するには gtk3-print-backends のインストールが必要になっています。

GTK+ - ArchWiki


インストールしたら,あっさりFirefoxでもgeditでも印刷ダイアログにプリンタが表示されるようになりました。

しかし,GTK+の項目だけじゃなくて,CUPSの方にも書いておいてよね。印刷できないときに,GTK+のWiki見に来るやつほとんどおらんでしょw
スポンサーサイト
16:37 未分類 | コメント(0) | トラックバック(0)

英単語はgoogle先生に読み上げさせて覚えよう!

2017/07/13
ふとしたきっかけで音声合成の技術がすごいことになっていることに気づきました。google翻訳が読み上げるテキストの英語が相当自然な感じ。では,日本語はどうよ?ということで日本語を読み上げさせてみたところ,英語よりは随分ナチュラルさが掛けるけれども,まぁ聞けなくはない。そこでふとよぎったのが,英語と日本語をコンピュータに読み上げさせれば,自分オリジナルのボキャビル用の音声マテリアルが作れるではないかっ!!

というわけで,早速ネット上を漁って,google翻訳等のText To Speechサービスに任意の文章を読み上げさせた音声データのファイルをダウンロードする方法を調べてみた。

まず,gooole翻訳に英語を読み上げさせる方法(本日現在)。こんな感じでアクセスするだけ。

http://translate.google.com/translate_tts?tl=en&q="ここに読み上げさせたい文章をURLエンコードしたもの"&client=tw-ob


単にwgetコマンドでファイルをダウンロードしようとしてもgoogle先生に弾かれるので,UAをChromeに偽装w 今のところ,これでDLできていますが,そのうちできなくなるのかな。情報によると,節度なくこれでアクセスしているとgoogle先生が起こって,IPで弾かれることもあるそうです。

wget --user-agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36" "http://translate.google.com/translate_tts?tl=en&q=$encoded&client=tw-ob" -O /tmp/headword.mp3



次,日本語。同じくgoogle先生に読み上げさせてもいいのですが,HOYAがやっているVoiceTextというサービスが個人での利用に限って,APIの使用を許してくれているので,日本語はそちらから落とすことにします。

まず,VoiceText Web APIの頁から無料会員登録をします。すぐに登録したメールアドレスにAPI KEYが送られてきますので,これを使ってアクセスします。

curl "https://api.voicetext.jp/v1/tts" -o "/tmp/japanese.wav" -u "送られてきたAPI_KEY" -d "text=ここに読み上げさせるテキスト" -d "speaker=show"


意外と簡単でした。

これで,CSVファイルに見出し語,例文,日本語をずらずら並べたものを読み上げさせて音声ファイルに落とすシェルスクリプトにしてみました。

#! /bin/bash

rawurlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""

for (( pos=0 ; pos c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}

oldifs=$IFS
IFS=,

#行数のカウント
number=`wc -l $1.csv`
cln=1
cat $1.csv | while read hw example japanese; do

#head word
echo "Processing : $hw ($cln/$number)"
encoded=`rawurlencode "$hw"`
wget --user-agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36" "http://translate.google.com/translate_tts?tl=en&q=$encoded&client=tw-ob" -O /tmp/headword.mp3 -q

#example
encoded=`rawurlencode "$example"`
wget --user-agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36" "http://translate.google.com/translate_tts?tl=en&q=$encoded&client=tw-ob" -O /tmp/example.mp3 -q

#japanese
curl "https://api.voicetext.jp/v1/tts" -o "/tmp/japanese.wav" -u "6rpscyb36bl7o68r:" -d "text=$japanese" -d "speaker=takeru" -s -S

#convert
ffmpeg -i "/tmp/headword.mp3" -vn -ac 1 -ar 24000 -acodec pcm_s16le -f wav "/tmp/headword.wav" -loglevel error
rm /tmp/headword.mp3
ffmpeg -i "/tmp/example.mp3" -vn -ac 1 -ar 24000 -acodec pcm_s16le -f wav "/tmp/example.wav" -loglevel error
rm /tmp/example.mp3
ffmpeg -i "/tmp/japanese.wav" -vn -ac 1 -ar 24000 -acodec pcm_s16le -f wav "/tmp/japanese2.wav" -loglevel error
rm /tmp/japanese.wav
sox /tmp/headword.wav mute.wav /tmp/example.wav mute.wav /tmp/japanese2.wav mute.wav /tmp/temp.wav


#merge
if [ -e /tmp/temp2.wav ]; then
# 存在する場合
sox /tmp/temp2.wav /tmp/temp.wav /tmp/temp3.wav
rm /tmp/temp.wav /tmp/temp2.wav
mv /tmp/temp3.wav /tmp/temp2.wav
else
# 存在しない場合
mv /tmp/temp.wav /tmp/temp2.wav
fi
rm /tmp/headword.wav /tmp/example.wav /tmp/japanese2.wav

cln=`expr $cln + 1`
done

ffmpeg -i "/tmp/temp2.wav" -vn -ac 1 -ar 24000 -ab 128k -acodec libmp3lame -f mp3 "$1.mp3"
mv /tmp/temp2.wav $1.wav
IFS=$oldifs


URLエンコードする関数は,Create a speaking Linux shell script with Googleからパクりました。ありがとうございました。


スクリプト中のYOUR_API_KEYはご自分のAPIキーに置き換えてくださいね。
wgetコマンド,curlコマンド,soxコマンドが予め必要ですので,インストールしておいて下さい。
スクリプト本体がおかれているフォルダにポーズ用の無音のwavファイルをおいておく必要があります。私は0.7秒にしています。soxコマンドで結合するのに,サンプリングレートとチャンネル数を合わせる必要があるので,

$ sox -n -r 24000 -c 1 mute.wav trim 0.0 0.7


として,mute.wavという名前の無音のwavファイルを作って下さい。

使い方は,1行に,見出し語,例文,日本語の解説を書いたCSVファイルを用意して,スクリプトと同じフォルダに保存し,

./スクリプト名.sh CSVファイルの拡張子を除いたファイル名


で,勝手にmp3とwavファイルを作ってくれます。chmodお忘れなく。

あと,何故か分かりませんが,readコマンドが2行目から最初の3文字を正しく読み取ってくれないので,CSVは

yield,Higher-rate deposit accounts yield good returns.,産み出す
  yield,He reluctantly yielded to their demands.,圧力などに負けて,抵抗をやめる
↑半角スペース3つ


てな感じで,2行目以降は先頭の見出し語のまえに半角スペース3つを挿入しないといけません。詳しい方,なぜこうなるのか教えて下さい。

これ,便利です。さっそく通勤の車の中や,皿洗いをしながら聞いています。
10:51 英語 | コメント(0) | トラックバック(0)

Canonの複合機が一部のPDFファイルをプリントできない・・・

2017/05/18
iMacにLubuntu入れたり,archlinux入れたりして,iMacを延命させております。ほぼ問題なく使用できているのですが,一点だけ困ったことが。Canonのカラー複合機のiRC-2550Fを使っているのですが,一部のPDFファイルを印刷しようとすると,ページの上の方に,なにやら元のPDFファイルが歪んだようもののようなわけのわからないものが印刷され,下4/5くらいは一面真っ黒のものが出力されるのです。困った,困った。

どうも圧縮率の高いPDFがだめみたいなのですが,きれいに印刷できないPDFと普通に印刷されるPDFの違いがよくわからない。ネットでいろいろ調べても解答は見つからず。

仕方がないので,PDFを一旦jpgなどの画像ファイルに変換して印刷していおりました。1〜2ページならよいのですが,これが数ページに渡るものだと,流石にページごとにjpgに変換して,印刷して・・・というのは手間がかかりすぎて,やってられません。

PDFを一旦マルチページtiffに変換した後に,再度PDFに変換して,再変換したPDFなら印刷が可能なことを発見しました。

それで,それを自動でやってくれるスクリプトにしました。

#!/bin/bash

convert -density 300 $1 new.tiff
convert new.tiff new.pdf
gs -dBATCH -dSAFER -dNOPAUSE -dFirstPage=1 -dLastPage=100 -sDEVICE=pdfwrite -sOutputFile=print.pdf new.pdf

lp -o InputSlot=Cas2 print.pdf

rm -fv new.tiff new.pdf print.pdf



これ,PDFをドロワー2に入れている裏紙に印刷させるスクリプト。これの他に,両面印刷と普通に片面印刷するスクリプトを用意して,使い分けています。使い方は,

chmod 755 SCRIPTNAME.sh
して,実行権限を付与して,スクリプトと同じディレクトリにPDFファイルを配置して,

./SCRIPTNAME.sh PDFFILE.pdf


#!/bin/bash

convert -density 300 $1 new.tiff
convert new.tiff new.pdf

filename=`echo $1 | cut -d "." -f 1`

gs -dBATCH -dSAFER -dNOPAUSE -dFirstPage=1 -dLastPage=100 -sDEVICE=pdfwrite -sOutputFile=${filename}_printable.pdf new.pdf

rm -fv new.tiff new.pdf


とするなら,問題ありのPDFファイルを普通に印刷可能なものに変換,ファイル名に_printableを追加して出力します。ファイルサイズが4倍くらいになります。やはり圧縮の問題?

ImageMagicKとGhostScriptが必要です。

12:27 Linux | コメント(0) | トラックバック(0)

Macbook Air mid 2010 にarchlinuxをインストールするのにワイヤレス設定でハマった

2017/04/07
つづいて,Macbook Air mid 2010にarchlinuxのインストールを試みて,ハマったこと。

基本的に,
MacBook - ArchWiki - Arch Linux
[翻訳] MacBook Air に Arch Linux をインストールする(デュアルブート) - Qiita
にしたがってインストールしていくだけ。

だが,また,ネットワーク関係でハマった。

公式のWikiにワイヤレスでのネットワークへの繋ぎ方が書いてない。MacbookにはLANケーブル繋ぐとこないんだから,それぐらい書いておいてよ・・・。2番めの記事に書いてあったので,すぐ分かりましたが・・・。archisoで

wifi-menu



とコマンドを打ち込むと,アクセスポイントがずらずらと出てくるので,↑↓キーでAPを選んでエンター。パスフレーズを入力して接続。Macbookによってはうまく行かない機種もあるようです。その場合は諦めてUSBのLANアダプタをどっかから調達しましょう。

それで,archlinux本体のインストールはさくさく進むのですが,ブートローダーをインストールしたあとに最初にarchlinuxを起動させたあとのワイヤレス接続。Wikiを隅々まで見ないでやっているのが悪いのだが,さっきwifi-menuコマンドで繋がったので,今度もwifi-menuで繋がると思うじゃないかっ!!しかし,今度はwifi-menuコマンドではエラーが出て繋がらない・・・。で,何か問題があると思うわけで,

# lspci | grep Network



でネットワークカードを調べると,BroadcomのBCM43224。

Broadcom のカードが載っている場合、Broadcom BCM4312 のページに従って下さい。



とあるので,そのページ,Broadcomワイヤレスに飛ぶ。すると,そこには驚愕の事実が記載されていた。

ノート: b43 モジュールがロードされて機能しているようなのにデバイスにアクセスできないときは、おそらく bcma モジュールをブラックリスト化する必要があります。下のトラブルシューティングを見て下さい。それで問題が解決しない場合、b43 を使うように CONFIG_B43_BCMA_EXTRA オプションを設定してカーネルを再コンパイルしなくてはなりません。このオプションはモジュール間での競合状態を解決するために導入されたもので BCM4322, BCM43224, BCM43225 チップセットのカードでは必須です。



CONFIG_B43_BCMA_EXTRA オプションを設定してカーネルを再コンパイルしなくてはなりません。
BCM43224チップセットのカードでは必須です,必須です,須です,です,す・・・・・
カーネルの再コンパイル,って,俺には敷居が高すぎる・・・・

でも,頑張って,友達からUSBのLANアダプタ借りてきて,何とかオプションを設定して,カーネルの再コンパイル,やろうとしました。しかし,CONFIG_B43_BCMA_EXTRAオプションを設定するところがない。

ネットをさまよい歩くと,英語ですけど,私と同じことをしようとしている人がいて,CONFIG_B43_BCMA_EXTRAオプションがないんだけど?という質問が。その質問に,カーネルのバージョンいくつからはそれはしなくてよくなったから設定項目が消えたという回答もあり。それで,英語の方の公式Wikiを見ていると,日本語にはある再コンパイルが必須という部分は相当する記載がありません。日本語のwikiが古かっただけのようです。おい,おい。

結局,ワイヤレス設定の公式Wikiの手順通りに設定したら,普通につながった。

要は,archlinux本体をインストールしたあとは,wifi-menuではワイヤレス接続はできないので,iwとか,wpa_supplicantとかを入れて,このコマンドで設定するということですね。そして,忘れてはいけない,dhcpcdなりでIPアドレスを取得すること。

ちょぼちょぼハマりますね。

13:11 Linux | コメント(0) | トラックバック(0)

軽量linux archlinuxで古いPCを爆速PCに蘇らせる

2017/04/05
私の仕事場でのメインマシンであるiMac Late 2009。購入したときはSnow Leopardだったが,今はアップグレードを重ね,Yosemite。ん,El Capitanだったかな?もっと新しいOSが出てるけどね。メモリも4GB->12GBに増強したけど,何するにしても1~2秒から数秒風車が 回り,小さなイライラが募り・・・。動作が軽快だという評判のlubuntuをVirtualBox上にインストールして使ってみたら,ゲストOSのくせして,ホストOSのOS Xより軽快なんだもの,嫌になってしまう。

思えば,20年以上前に仕事に必要というのでFMVを購入して以来,PCでやっていることは,ワープロに,表計算に,ネットにメールとほとんど変わらないのに,メモリは32MB->12GB,ハードディスクの容量は100倍以上,CPUはMMXPentiumの133MHzから,core i5のクロックは分からん!でも,やっていることに大した違いはなくて,PCのスペックは激しく向上しているのに,OSのもっさり挙動にイライラしているのはなぜなのだ!!

要は,リッチなGUIだとか,使いもしない機能がバックグラウンドで動いているとか,要らん機能にPCのパワーを割いているからでしょう。

そんなときに記事で見たおすすめ軽量linux8選だか,10選だとかで,心を惹かれたのがarchlinux+お好みの軽量デスクトップ環境。初期状態では,必要最低限の機能しかインストールされず,GUI環境も自分で追加でインストールする,って,これぞ俺が求めていたものではないか!!

さっそく公式のインストールガイドを参考にiMac上のVirtualBoxにインストールしてみたら,あっさりインストール成功。VirtualBoxだからドライバとかの問題もないしね。lubuntuのときには,プリンタドライバもベンダー(キャノン)がバイナリパッケージを用意してくれていたのが,archlinuxの場合それがないのだけれど,ベンダーが公開しているソースから,かんたんなコマンドでソースからコンパイルできるシステムがあるので,使ってたCanonのirc2550Fのドライバも難なくインストールに成功。仮想環境上でうまく行くと,次はネイティブにインストールしたくなるもの。気を良くした私は,それから,OSなしで3000円で購入してきたNECの元Win7マシン,Macbook Air mid 2010,それからメインマシンのiMac late 2009にインストールしました。が,それなりに苦労しました。

なので,公式のwikiを見てもハマったポイントについて,つらつらと。

まず,最初にインストールしたOSなしの中古Win7。

インストールガイドにしたがって,まず,起動モードの確認だが,起動モードがなんで,パーティションテーブルをどうするのかが,最初にぶつかるポイントですね。って,マジ初っ端から,いろいろ勉強しなければならない。

起動モード:BIOSか,UEFIか
パーティションテーブル:MBRか,GPTか。

中古Win7の起動方式がBIOSで,パーティショニングのwikiに「古いハードウェアにインストールする場合 (特にノートパソコンにインストールする場合)、BIOS が GPT をサポートしていない可能性があるので MBR を選択しましょう。」とあったので,MBRを選択。

インストールガイドに

Arch Linux をインストールするデバイスには以下のパーティションが必要です:
ルートディレクトリ / のパーティション。


とあるので,ハードディスク全体を一つのパーティションにした。

スワップパーティションはメモリを4GB以上積んでいる場合は,ない方がパフォーマンスがいいという記載をどっかで見たので,作らないことに決定!

paredコマンドを使って,パーティションを作成。

ここまでは,いろんなページを行ったり来たりしたものの,まずまず順調に経過。そのままインストールガイドに従い,パーティションのフォーマットとマウントを行った。

次に,ハマったのがネットワーク関係。VirutualBoxにインストールしたときは,インストールisoから立ち上げたときは,なんにもしなくてもネットに繋がってたのに,中古Win7はネットに繋がらない。ネット経由のインストールなのに,インストール作業開始前に立ち往生した。

ネットワーク設定の公式wikiの説明がよく分からん。勘違いさせる最大の原因は,冒頭のこの一文ではないだろうか。

多くの場合、インストールするだけで動作するネットワーク設定がすでに作られています。



この一文を読むと,殆どの場合は,何もしなくてもネットに繋がるのだ!と理解するだろっ!でもそうじゃなかった。

ともかく,wikiにしたがって,
・ホストネームの設定→VirtualBoxにインストールしたときはArchlinuxのインストール後にした設定
・ローカルネットワークのホストネーム解決→上に同じ
なので,ここは関係ないとスキップ。

次に,デバイスドライバの確認。どうもドライバのロードに問題がありそう。手動でモジュールをロードしてみてくださいなんてことが書いてあるので,カーネルモジュール#ロードを見てくださいなんて書いてあるので,スマホでモジュールを探してみたり,カーネルモジュール#ロードを見てみたりしたが,どのモジュールを,どこからゲットできるのかが分からん。だいたいネットに繋がってないし。デバイスがBroadcomのBCM57780ということはわかったので,「BCM57780 ドライバ」なんかでググっていると,もとのArchlinuxのネットワーク設定のページが上がっている。同じページのトラブルシューティングにBCM57780のことが出ていた。

このBCM57780は,モジュールをロードする順番を指定しないとうまく作動しないとかで,そこに書かれた対処法を行ったところ,めでたくネットに繋がった。

で,これでめでたし,めでたしと思いきや,インストール後に再度ハマる。

archlinux本体をインストールして,さて,デスクトップ環境をインストールしようとしても,ネットに繋がってないのだ!ちゃんとモジュールをロードする順番も正しく指定しているのに,である。

多くの場合、インストールするだけで動作するネットワーク設定がすでに作られています。


さっき,archlinux本体をインストールするときにはネットに繋がっていたじゃないかっ!!

で,もう一度,ネットワーク設定のwikiを読み返し,もしやこれはDHCPからIPアドレスの割当を受けていないのではないかと思い立った。IP アドレスの設定のところを読み,dhcpd#実行に飛び,そこに書かれているように,dhcpcdサービスを開始させたところ,うまく繋がった。

sudo systemctl start dhcpcd



たったけこれだけのことだったが,これに気がつくのに随分ネットをさまよいましたよ。

勘違いの原因。

1.VirtualBoxにインストールしたときは,ホストOSがIPアドレスの割当を受けていたので,ゲストのArchlinuxでDHCPサービスを起動させる必要がなかった(ような気がする。今となっては覚えていない)。
2.”多くの場合、インストールするだけで動作するネットワーク設定がすでに作られています。”と記載されている上に,インストールisoは何もしなくてもIPアドレスの割当を受けてくれていたので,インストール後のArchlinuxも何もしなくてもネットに繋がると信じ込んでいた。

結論。

Archlinuxでは,”多くの場合、インストールするだけで動作するネットワーク設定がすでに作られています。”ので,あとは,dhcpcdサービスを起動させるなどしてIPアドレスの割当を受ければネットに繋がる。

もうちょっと親切に書いてくれていれば,こんなことではまらずに済んだのに・・・

archlinux本体のインストールが終了すれば,次は,一般的な推奨事項に移るわけですが,これが大量にずらずら並んでいるので,これ全部やるの?って感じ。最低限やって置かないとあとで面倒になりそうなものは,

1.ユーザーの追加
2.ユーザーがsudoを使えるようにする。
3.ユーザーをlpグループに加える(←これやっとかないと印刷とかbluetoothが使えない)
4.GUI(デスクトップ環境)を入れる。
5.日本語化
ですかね。やり方は,wikiとググればすぐに解ると思います。
22:44 未分類 | コメント(0) | トラックバック(0)
 | HOME | Next »

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。