デスクトップに常駐するウィジェットの作り方はいろいろあると思うが、gtk+2.0ではステータスアイコンを使う方法が簡単である。

ステータスアイコンそのものはウィジェットとしての機能を持たないが、アイコンをクリックした時のシグナルを拾えるので、そこから必要な処理を実行すれば良い。

必要な処理、というのはGUI環境での対話動作であれば、「ウィンドウを作って表示して、用が済んだら閉じる」といったものになる。

問題は「用が済んだら閉じる」という動作である。

通常、ステータスアイコンを再度クリックした時に閉じる(というプログラムを書く)ことになる。

では、アイコン以外の場所をクリックしたらどうなるか?

感覚的には、同様に閉じて欲しい(ポップアップメニューとかの動作と同じ)ところなのだけれどそのままではうまくいかない。というのは、ステータスアイコン及びそこから呼び出されたウィンドウにシグナルを送る術がないからである。

代替手段として、TOPLEVELで作成したウィンドウはウィンドウマネージャの管理下にあることを利用する方法がある。この場合も、gtk側に既製のシグナル等ないのでイベントドリブンにはできない。gtkのメインループの中に、ウィンドウのステータスをチェックする処理を挿入して、ステータスが変わったらウィンドウを閉じるように仕込まなくてはならない。チェックの間隔が狭いとCPU負荷が上がってしまうし、開き過ぎるとレスポンスが悪くなる。

なお、この方法はPOPUPで作成したウィンドウには使えない(ウィンドウマネージャの管理から外れるため)。

その他の問題として、ステータスアイコンからウィンドウを開いた場合、マウスオーバーで他のウィンドウにフォーカスが移動してしまう、というのもある。ほとんどの場合、これは既存のデスクトップ環境と異なる動作になると思われる。

自作したLCDバックライト調整ウィジェットの動作の様子。後ろにあるウィンドウのボタンがフォーカスされている。

 

xfce4のパネルプラグイン(インディケータープラグイン)経由で動作しているSound Menuの様子。

 

 


ということで、ステータスアイコンを利用する方法は手軽で汎用性がある(gtk+2.0を使っているデスクトップならほとんどで動作可能なはず)一方、ルック&フィールの統一という点ではやや難があると言わざるを得ない。

なので、やはりきちんとしたものを作るとなるとデスクトップ環境のプラグインモジュール形式で書かざるを得ないと思われる。これはこれで煩わしいのであった。

 

自分宛てメモ

blueman-appletを弄っていたらいつの間にかペアリングしていたようなのだが、念の為、bluetoothctlでもやってみた。

当然だが、micro:bit側には事前にbluetooth用のアプリケーションを仕込んでおかなくてはならない。
ペアリングするには、ABボタンを同時に押してから「電源投入」である。リセットボタンでもいける時もあるが不安定だった。

bluetoothctl

BLEドングルが選択されていることを確認してから、
 

scan on

[CHG] Device EC:0A:F8:92:D6:B5 Name: BBC micro:bit [zateg]
[CHG] Device EC:0A:F8:92:D6:B5 Alias: BBC micro:bit [zateg]

scan off

connect EC:0A:F8:92:D6:B5


接続が完了したら


info EC:0A:F8:92:D6:B5

    Name: BBC micro:bit [zateg]
    Alias: BBC micro:bit [zateg]
    Appearance: 0x0200
    Paired: yes
    Trusted: no
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
    UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
    UUID: Vendor specific           (e95d93af-251d-470a-a062-fa1922dfa9a8)
    UUID: Vendor specific           (e95d93b0-251d-470a-a062-fa1922dfa9a8)
    UUID: Vendor specific           (e97dd91d-251d-470a-a062-fa1922dfa9a8)

 

    
繋いだだけで、PC側のプログラムが何もないので、何も出来ない。
 

自分宛てメモ

 

追記

debianではこの方法が使えたが、Slitazでは「サポートされていない操作」とかでうまくいかなかった。

 

完全に忘れていたので。

概略
root権限を分割して任意のプロセスに付与する。
分割した権限の情報はファイルのpermittedに置く。

主なケーパビリティ

CAP_CHOWN
    ファイルのUIDとGIDを変更できる。
CAP_DAC_OVERRIDE
    ファイルにアクセス(読み書き実行)できる。
CAP_DAC_READ_SEARCH
    ファイルの読み出しと実行ができる。
CAP_KILL
    シグナルを送信できる。
CAP_NET_BIND_SERVICE
    1024番未満のポートを使用できる。
CAP_NET_ADMIN
    ネットワーク関連の操作ができる。
    (インターフェース、iptables やルーティングテーブルの設定など)
CAP_NET_RAW
    RAWソケットおよびPACKETソケットを使用できる。
CAP_SYS_MODULE
    カーネルモジュールのロード・アンロードが行える。
CAP_SYS_CHROOT
    chroot できる。
CAP_SYS_ADMIN
    quota や swap、mount などなど、様々な操作が行える。
CAP_SYS_TIME
    システム時間の設定が行える
    
rootプロセスは基本的に全てのケーパビリティを持っている(はず)。必要のないケーパビリティを外すことでセキュリティ強度を上げることができる、らしい。(そんな面倒なことを誰がするのか?)

ファイルへのケーパビリティの設定
sudo setcap ケーパビリティ=cp 実行可能ファイル

LCD輝度調整プログラムにファイルのアクセス権限を与える
sudo setcap cap_dac_override=ep lcd
lcdを実行するとプロセスにもcap_dac_overrideが設定されるので、/sys/class/backlight/以下の書き換えが可能になる。(ちなみに、許可になっていないとセグって終わる)

確認方法
getcap 実行可能ファイル


参考・引用URL
いますぐ実践! Linux システム管理 / Vol.183
http://www.usupi.org/sysad/183.html

自分宛てメモ

 

メインPCである ThinkPadR500にはBluetoothコントローラが内蔵されている(内部USB接続)。

このコントローラはBluetooth Low Energy(以下BLE)に対応していないようで、最近のBluetoothデバイスとペアリングできない。

ということで、BLE対応のUSBドングルに置換することにしたのだが、これが一筋縄ではいかなかった。

 

OS LinuxMint19.1(32bit,Xfce4), LinuxMint 18.3(64bit,Xfce4)

 

コントローラの確認

 

lsusb

Bus 002 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 17ef:1004 Lenovo Integrated Webcam
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 008: ID 0a5c:2145 Broadcom Corp. BCM2045B (BDC-2.1) [Bluetooth Controller]
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 1241:1177 Belkin Mouse [HT82M21A]
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

一番最初の行がBLE対応ドングル。

 

blueberry 及び blueman-appletでの切り替え

デスクトップアプレットであるblueberryやblueman-appletで複数のコントローラを選択・切替できれば簡単なのだが、どうもそのようにはできていないらしい。
ただし、ペアリング情報はコントローラ毎に保存できるらしい。紛らわしい。

 

活線モニタ

端末上で bluetoothctl を起動しておくと、コントローラの起動・停止をモニタできる。


内蔵コントローラの停止

無線デバイスのON/OFFはrfkillで管理しているので、一旦ブロックを解除してから、hciconfigでdownさせる。

rfkill unblock bluetooth
sudo hciconfig hci[内蔵コントローラに付された番号] down

hciconfig でBLE対応ドングルがupしているか見ておく。

 

bluetoothctlでの切替

前出のモニタ上でデフォルトを切り替えておく。

select <BLE対応ドングルの名前>
power on

 

ここまでやれば、あとはblueberryやblueman-appletでペアリングやプロファイルを管理できる(はず)。

 

本件の最終目的がこれ。デバイスとして検出はできるがペアリングには至らず。先は長い。

(LinuxMint 18.3)

 

 

lightdmを入れたのでスクリーンのロックもlight-locker に変更した。

 

sudo apt install light-locker
sudo apt purge xscreensaver xscreensaver-data

 

xfce4 におけるロッカープログラム xflock4 は最初からlight-lockerに対応しているので、このまま再起動すればlight-lockerが使えるようになる。

 

追記

自動開始アプリケーションにlight-lockerを登録して有効にしておくこと。(~/.config/autostart/light-locker.desktop)

 

light-lockerの最大の特徴はルック&フィールがlightdmと同じということ。デスクトップ環境では、これは結構重要な点だと思う。

 

ネットを漁って得た情報によれば、ロック解除時にlightdmを経由する(詳細は未確認)らしく、このため他のタイマー系の設定、例えば電源管理設定での時限スリープなんかと相性が悪いらしい。

 

但し、個人的に時限スリープは使っていないので問題にはならない。

 

自分宛てメモ。

 

LinuxMint18.3で採用されているmdmは目立つ不具合こそないが、ユーザーが設定した背景画像がテーマによって隠されて表示されないことがある。

デフォルトテーマであるMint-Yがそれで、スライドショーが実行されるのが原因である。

ユーザーが指定した背景画像を表示させたい場合はテーマを他のものに変更するか、スライドショーの中に含めてしまえば良いのだが、最近のLinuxMintではlightdmを採用しているらしいので、そちらに差し替えてみることにした。

 

ネットを漁って明らかになった手順は次の通り。作業に先立ってtimeshiftによるバックアップの作成、リポジトリの更新を忘れないこと。

 

1)ディスプレイマネージャの確認

cat /etc/X11/default-display-manager

 

2)lightdm のインストール

sudo apt install lightdm lightdm-settings slick-greeter

 

3)mdmの削除

sudo apt remove --purge mdm mint-mdm-themes*

sudo dpkg-reconfigure lightdm

 

ここでPCを再起動する。正常にインストールされていれば、lightdmによるログイン画面が表示される。

設定用のツールもインストールされるので、デスクトップの設定画面から呼び出して使用できる。

 

guestアカウントの禁止

 

ゲストアカウント(テンポラリアカウント)が許可されている場合、パスワード無しでPCを使えるようになるが、個人持ちのノートPCなんかだと流石に気持ち悪いのでこれを禁止する方法を以下に示す。

 

/etc/lightdm/lightdm.conf という設定ファイルを置く。おそらく、既設のはず。

 

中身を次のように設定する。

 

[Seat:*]
allow-guest=false

 

設定が有効になるのは、lightdm再起動後なので(ログアウトではなく)一旦PCを再起動させて確認すること。

 

自分宛てメモ。

locate コマンドは手っ取り早くて便利だけれど、データベースの作成に時間が掛かり過ぎるのが難点である。

/etc/updatedb.conf の内容で、検索対象ディレクトリやファイルシステムを設定できるので、データベースに保持する必要がなさそうなディレクトリを除外する。


例えば timeshift を使ってスナップショットを作成している場合、 /timeshift を除外する。
また、マルチユーザーあるいはマルチブート環境で /home を共用している場合は、他のOSや必要ないユーザーのホームディレクトリは除外する。

その他、/bin とか /lib とか /usr 以下とか、何が入っているのか概ね把握している(あるいは、把握すべき)ディレクトリも検索対象から外しておく。

これで、デフォルトの設定では123MBもあったデータベースファイル(/var/lib/mlocate/mlocate.db)が81MBまで小さくなった。

 


Search

Calendar

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< January 2019 >>

Archive

Mobile

qrcode

Selected Entry

Link

Profile

Search

Other

Powered

無料ブログ作成サービス JUGEM