Ubuntu」カテゴリーアーカイブ

GTK+でファイルを選ぶ、gtk_file_chooser_dialog_new

GUIでファイルを探す処理に、GTK+を利用してみよう。

プログラムでファイルを選ぶ場合、あらかじめシェルかファイラーを用い、ファイル名を正確に代入する必要になる。選んだファイル名を返す、単純なGUIのプログラムがあれば汎用できるので、便利である。今回は、GTK+というツールボックスを使用して、GUIでファイルを探すプログラムの制作を行ってみよう。
設定として、簡単で単純なプログラム。汎用性が高いこと。カスタマイズ可能。GTK+の学習を目的とする。

filechooser.c

コンパイルは以下で。

エラーが出る

gtk_dialog_run (GTK_DIALOG (dialog)); このエラーはで生じてる。
gtk_file_chooser_dialog_new の二番目の引数、NULLだと生じるのか?
そのようだった。main関数から、呼び出すと消えた。 

main関数とは、別に関数を作り、mainから呼び出すと、GtkDialog mapped without a transient parentのエラーは消えた。mainの中でgtk_file_chooser_dialog_newウィジェットを実行してもエラーがでない方法がありそうだが。組み合わせをいじってみて、mainの中でも動くようになった。改めてみると、単純な表現であるが、初心者が戸惑うツボが垣間見れる。

実行すると、引数のディレクトリーを指定できるので、そのところで開く。
ファイルを選ぶと、標準出力にファイル名を出すようしにした。

シェルスクリプトから呼び出すと、応用できる範囲は広い。

このように、tclでfilePathにファイル名を代入することができる。Tkで使ってた、tk_getOpenFile をこちらに変えたのである。Tkではプレビューがないので画像ファイルは、呼び出して表示と手間がかかっていた。この方法だとプレビューと言うか、アイコンが見えるのあるが……。小さい。まったく小さい。大きさ変えられないし。もっと大きなアイコン表示ができる?プレビューが同じ窓でできない? 

You can add a custom preview widget to a file chooser and then get notification about when the preview needs to be updated. To install a preview widget, use Gtk.FileChooser.set_preview_widget(). Then, connect to the Gtk.FileChooser ::update-preview signal to get notified when you need to update the contents of the preview.

gtk_file_chooser_set_preview_widget()を使ってみた。

これだと画像を選択すれば、右にプレビューが表示されるので便利だ。


https://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html#gtk-file-chooser-dialog-new
https://developer.gnome.org/gtk3/stable/GtkFileChooser.html
https://lazka.github.io/pgi-docs/Gtk-3.0/interfaces/FileChooser.html

追加
 Couldn’t connect to accessibility bus: Failed to connect to socket /tmp/dbus
が出現するのを消すには、

を実行しておく、bashrcに記載しておく。fvwmのメニューの中で実行して、エラーが出るので、wish中に

を追加するとエラーが出なくなった。dbusのバグのようだが。

Kodiのフォントを変えてみる

とりあえず、vlgothicにしてみた。すっきり目に見える。時刻も小さめに見えるんで良とする。

fvwmに、fvwm-menu-desktop を使用し XDG Menusをメニュー追加

fvwmのメニューはカスタマイズが簡単にできるが、自動的に生成されるメニューはDebianメニューを使っていたが、
もっと便利なXDG Menusがあったのでこれを使えるように設定した。
StartFunctionsに以下を追加

.XDGMenuファイルがないと、XDGRegenを実行し、そのファイルを読み込む。
XDGRegenは、以下で設定する。

https://www.mankier.com/1/fvwm-menu-desktop

raid1 片方消えていた

16.10を使用してたが、raid1の片方が消えていた。active raid1からデバイス名が消えていた。

新たに追加で、追加できたが。なんでだろ。

後日また、消えた。sdd5が
再度addした。
大丈夫か Linux ubuntu16-10-64 4.8.0-37-generic #39-Ubuntu SMP Thu Jan 26 02:27:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Ubuntu 16.10にしたら、ハイバネートできなくなった

http://askubuntu.com/questions/839147/hibernation-with-ubuntu-16-10-fails
これか?

richblのやり方だと起動時にカーネルパニックおこしたわ
crysmanのやり方は、わしの16.04のハイバネートとほぼ同じだが、画面が暗くなって反応しなくなった。
したがって、16.10はわしの環境だと、できないということなのかぁ。

/etc/initramfs-tools/conf.d/resume に RESUME=UUID=91ccfcbe-de30-457e-9998-953ea78588c6 に変更
/etc/default/grubの

変更してみた
sudo update-initramfs -u
sudo update-grub
これでもだめだ

https://help.ubuntu.com/community/PowerManagement/Hibernate
これか?

Platform is the default and recommended mode of hibernation. Unfortunately, the “platform” mode of hibernation does not work on some systems with a broken BIOS. In such cases the “shutdown” mode of hibernation might work.

http://askubuntu.com/questions/768136/how-can-i-hibernate-on-ubuntu-16-04
ここにも書いてあるが

結果;うまく動かない

これは?

これもだめ

https://ubuntuforums.org/showthread.php?t=2306178
これは?
http://d.hatena.ne.jp/kakurasan/20080421/p1
これは?
だめだな
Edit /etc/systemd/logind.conf to set HandleLidSwitch=hibernate (optional: permits hibernate to start on lid close)
やってみたどうだ?だめだった。HandleLidSwitchは、ラップトップとかで、そのキーが押された時の動作のようだ。
環境によってカーネルが動作できてない。
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1566302
結論 カーネル次第

これが原因か

http://askubuntu.com/questions/76488/system-wont-boot-unless-i-type-exit-at-initramfs-prompt

Boot Degraded RAID
Modify /etc/initramfs-tools/conf.d/mdadm
BOOT_DEGRADED=true
Update initram
sudo update-initramfs -u
Reboot

これか?
だめだった

http://opensuse.opensuse.narkive.com/IOLnQHP2/configuring-a-working-suspend-to-disk-method

これか?

→関連
関連投稿;Ubuntu16.04のサスペンド、ハイバネート

結末として。17.04 zestyに夢を託して、いじってみたが、やはりハイバネート失敗。
LTSに戻すしか方法はなさそうだ。

ちょっと待った!
17.04で遂にハイバネートできそう!
何度もテストをしていたが。ヒントを掴んだ気がする。

grubが関係してたのだ!
grub-installをした、システムでない、他のパーティションのシステムから起動させた、17.04でハイバネートができるようになった。しかし、grub-installを行ったシステムでは、ハイバネートできない。
これ大きなヒントになりそうですね。もう少し探ってみるか。

grub起動時ここの1行から5行目まで削除してコントロールXで起動して、ハイバネートして。再起動時にも同様に行うと、ハイバネート起動に成功することができた。
ただ、毎回、削除するのも面倒だし。消して保存を考えないとならない。

という訳で、設定を保存するためには、どこをいじろうかな。
/etc/grub.d/10_linux にload_video,gfxmodeがあるんで、ここを編集した。
でも、ハイバネートからの起動に失敗することあるんだよね。

ハイバネートからの復帰に失敗することがあり、何とかならないものかと。
amdgpuが自分の環境だと、失敗の原因のようだ。
/etc/modprobe.d/blacklist.conf

でblacklistにしとく。radeonだけkmsでロードされるようにする。
GRUBでradeon.modeset=1 radeon.dpm=0と記述することにより、ハイバネートが成功するようになった。

/etc/default/grub

/etc/grub.d/10_linux はオリジナルのものにしたが問題なくハイバネートと復帰ができた。

これで、継続してハイバネートできればよいが。

その後、一日数回ハイバネートしてるが、8日は無事に復帰できている。 

つづく

UbuntuにBrotherのプリンターを設定 16.04

http://note.kurodigi.com/post-0-30/ LinuxでBrother製プリンターを使う

/usr/libx32/libstdc++.so.6 をインストールする
$ sudo apt-get install libx32stdc++6
$ sudo apt-get install gdebi
$ sudo gdebi dcpj525nlpr-3.0.1-1.i386.deb
$ sudo gdebi dcpj525ncupswrapper-3.0.0-1.i386.deb

lpadmin groupにユーザーを登録する(Debianでは不要)これはすでにあったんで略
CUPS Web 管理サイト(http://localhost:631/admin)で設定

Ubuntu16.04のサスペンド、ハイバネート

Ubuntu 16.04でサスペンド、ハイバネートを行う

サスペンドはできるのだが、ハイバネートがうまく動作しない。なぜハイバネート(ハイバネーション)を行いたいのか?

ハイバネーションとは、コンピュータの電源を切る直前の状態を保存して、次に電源を入れたときに電源を切る直前の状態から作業を再開する機能。「休止状態」とも呼ばれる。

サスペンドでもいいんじゃない?と思うだろ

ハイバネーション中はコンピュータの電源を完全に切ってしまうため、(バッテリーの自由放電を除いて)電力を消費しない。ハイバネーションを行うためには、メモリ内容を保存できるだけの空き領域がハードディスクに存在する必要がある。「サスペンド」機能に似ているが、サスペンドは作業状態をメモリに、ハイバネーションはハードディスクに保存する点が異なる。

<電源を完全に切ることが、ハイバネーションとサスペンドの違いである。それは電力を消費しない、つまりエネルギーゼロでメモリの内容を保存できるのである。

電源を切る直前の状態に戻す。いちいちOSやアプリケーションソフトの終了や起動を行う場合よりも時間や手間がかからず、消費電力も抑えることができる。

しかも、ウィンドウズをブートさせてウィンドウズを使用したあと、Ubuntuを立ち上げ、作業の続きをできる。こんな理にかなった方法を使わないことはない。が、Ubuntu 16.04で使えなくなっていた。

Ubuntu 16.04でサスペンド、ハイバネートを行う方法

btrfsパーティション、ファイルシステムは使ってないので、要らない。SWAPがRAMより大きく必要になる。

このファイルに以下の記述がなければ、書く。

そしてリスタート

ここにファイルができた。

で、これでも動かない。手動でハイバネートを行ってみる。

これでもだめな場合、SWAPの設定をする。

ここからが以下のサイトを参考に
http://www.linux.org/threads/all-about-swap.6470/ All About Swap

If your kernel supports hibernation, but your system will not hibernate, then try this. In /etc/default/grub, replace “[GRUB_CMDLINE_LINUX=””]” with “[GRUB_CMDLINE_LINUX=”resume=UUID=4236dabb-fa7d-4066-b171-91ffa7afb4f4″]”, then run “update-grub”. Next, execute the command string below.
echo “RESUME=UUID=4236dabb-fa7d-4066-b171-91ffa7afb4f4” > /etc/initramfs-tools/conf.d/resume; update-initramfs -u
You may be wondering what is happening. Well, GRUB is being informed which swap space contains the hibernated system (if hibernation took place). Initramfs is also informed about the swap space used for hibernation. Obviously, the user must type their own UUID in-place of mine. The UUID is a special way to specify partitions.

/etc/default/grubに、上の記述し、update-grubを行う。
/etc/initramfs-tools/conf.d/resumeに、不明なUUIDの指定があったので、消してSWAP
UUIDを記入し

、update-initramfs -uを行う。
*もちろんこのUUIDは、わしの環境のであるが。

とか

で探るんじゃ。わしのは、fstabでpriでストライピングしてあるやつだ。よくわからないが片方だけのUUIDであるが、これよくないんかな?だったらストライピングやめるか。普通swap使ってないしなぁ。
これでハイバネートできるようになった。ついでにGRUB画面で画像を表示を行った。
https://help.ubuntu.com/community/Grub2/Displays Grub2/Displays
を参考に /boot/grubにJPGファイルを入れた。

  1. ハイバネートを成功させた
  2. GRUBに画像表示をさせた
  3. ハイバネートからのパスワードをかけた xscreensaverをインストールした。

これでUbuntu 16.04で、作業を中断しても、元の状態に戻せる、ハイバネートが使えるようになった。
ところが……つづきはこちら
https://www.exodabe.com/20170124354.html

コメント、質問、感想はお気軽にどうぞ