10月≪ 123456789101112131415161718192021222324252627282930≫12月

スポンサーサイト

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

Arch LinuxでCanonのプリンタが突然使えなくなる,のと,iMacとnomodeset

2017/09/28
iMac Late 2009のオンボロPCにYosemiteのほかに,Arch Linuxをデュアルブートさせて,もっぱらArch Linuxを使っております。CanonのカラーイメージランナーIRC2550Fをネットワーク接続で使っております。こちらも再リースを重ねた年代物。

OS Xというのか,macOSというのか,まぁ8年選手にはAppleのOSは重くてイライラさせられますが,Arch Linuxは軽快にキビキビ動くので,これ,永遠にPCを買い直す必要ないのではないか?というくらい。

Linuxで困るのは,周辺機器のベンダーがLinux用のドライバを提供していないことが多いことですかね。

いままで,AURから,Lone_Wolfさんがメンテしているパッケージをビルドして使っていましたが,これまである日突然プリンタがプリントしなくなる事故に2度遭遇。

最初は,ある日突然,プリンタがうんともすんとも言わなくなったので,あれれれれ?と一体何が怒ったのか?と。その日,某パッケージをインストールしたところだったので,こいつのせいか?とあたりを付けて,そのパッケージをアンインストールしたら再びプリンタが使えるようになったので,犯人はすぐに判明しました。そのパッケージが依存関係でインストールしたlib32-libjpeg-turboがインストールされているとプリンタが動かなくなります。何か干渉を起こしていたのでしょう。大して必要なアプリでもなかったので,そのアプリの使用を断念することで解決を図りました。

しかし,今月になって,再びプリンタが反応しなくなる事態が発生。その日も,あるアプリケーションをビルドしたばっかりだったので,こいつのせいに違いないと踏んで,ビルドしたアプリを削除してみましたが,今回は削除しても挙動は変わらず...。うーむ。何かインストール,アンインストールの過程で,何かシステムを壊しちゃった?と思って,面倒だったので,Arch Linuxを再インストールすることにしました。

が,システムの再インストール後でも,プリンタが動かないーーーー。何度もcupsとドライバを入れ直しても,まったく動かず。VirtualBoxにYosemiteとWin10を入れて,VMから印刷を試みましたが,なぜかこちらもエラーで印刷できず・・・。2週間ほどなんにもプリントできないことが続き,流石に仕事に触るので,思い切ってフォーラムに質問してみました。

驚いたことに,パッケージのメンテナーのLone_Wolfさまから直々にアドバイスを賜り,原因が判明しました。

8月にアップグレードされたlib32-glibcが原因でした。バージョン2.25-5にダウングレードすると印刷機能が復活し,バージョン2.26-1にアップグレードするとプリンタが動かなくなります。

9月に某アプリをビルドするときに,ミラーからそんなファイルないよーと怒られたので,システム全体をアップデートしたときに,このライブラリもアップグレードされたのが原因でした。

ただ,ライブラリの名前からしていろんなパッケージがこれに依存していそうなので,これをダウングレードしたままにしておくのは怖いなぁ・・・と思っていたところ,Lone_Wolfさまから,キャノンがArch Linuxを放置プレイしていて,プリンタが動かない間は,みんあubuntuのVMから印刷していたという話を聞いて,早速LubuntuをVirtualBoxに入れてみたところ,今度はバッチリ。印刷のためだけにVMを立ち上げておくのもアレですが,キャノンはArch Linuxはサポート対象外ということで,Archで不具合が出ても,対応してくれないみたいです。Ubuntuはサポート対象らしいので,キャノンのドライバがアップデートで偶然Archでも動くようになるまではこの体制で行くしかないです。

VirtualBoxの設定>ネットワーク>アダプタ1の「割り当て」をブリッジアダプターに変更して,
(これでゲストに独自のIPアドレスが振られる)
ゲストのubuntuの方でプリンタの共有を有効にして,
公式Wikiに従ってホストの方にavahiをセットアップしたら,

ホストのプリントダイアログで普通にゲスト上のプリンタが表示されるようになりました。

というわけで,現在,Arch Linuxのホストをデスクトップ1で,Lubuntuのゲストをデスクトップ2で使用中。CPUをそれぞれ4つに割り振って,ゲストにはメモリを2GBを割当。ゲストもホストも,Yosemiteよりきびきび動いております。macOS重すぎ・・。

というわけで,iMacでArch Linuxをデュアルブートで使うのは超オススメなのですが,インストール時にすごくハマったことがあったので,それを追記しておきます。

詳しいことは理解しておりませんが,KMSとディスプレイドライバの相性が悪い(と表現していいのかどうかわかりませんが),とにかく,インストーラーを起動するときも,インストールしたArchを起動するときも,KMSを使わないように設定しないと,画面が真っ暗になって,なんにも表示されません。

インストーラーを起動するときに,ブートメニューが表示されているときに「e」を押して,そこで評されるカーネルパラメーターの末尾にnomodesetと追記した上で起動させる必要があります。インストールしたArch Linuxも,ブートローダーの設定ファイルにnomodesetを書き足す必要あります。

ドライバも汎用のxf86-video-fbdevでないと使えないのではなかったかな???これだとアクセラレーションが効かないのか,mameでレトロアーケードゲームをしようとすると,フレームを間引きしないと遅くて遊べませんw ワープロとメールとネットくらいでしか使わないので,全然問題ありません。
スポンサーサイト
09:56 Linux | コメント(0) | トラックバック(0)

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)
 | HOME | Next »

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