仮想デスクトップのナンバーの取得

パピーリナックスを初めて使う方

モデレータ: 暇人, YoN, nyu

返信する
ぱちゃ
記事: 13
登録日時: 12/01/09(月) 09:42

仮想デスクトップのナンバーの取得

投稿記事 by ぱちゃ »

仮想デスクトップのナンバーをコマンドで取得する方法はありますでしょうか。
トレイを隠す設定にしているので、仮想デスクトップを切り替えた時に、
今のナンバーが分かるようにすることが目標です。
pwidgetsに表示させるか、切り替えた時にダイアログで表示しようかと思っていますので、
切り替えたイベントを拾える方法も分かると助かります。

Racy 5.2.2 と Slacko 5.3.1 です。
Slacko 5.3.1, Racy 5.2.2 Thoshiba Dynabook Satellite J12.
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: 仮想デスクトップのナンバーの取得

投稿記事 by サボり魔 »

slacko-5.3.1 kernel-2.6.37.6 です

コード: 全て選択

xprop -root | grep "_NET_CURRENT_DESKTOP(CARDINAL)"
ゼロ始まりで取得できます。あとはお好きなようにいじってください。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
ぱちゃ
記事: 13
登録日時: 12/01/09(月) 09:42

Re: 仮想デスクトップのナンバーの取得

投稿記事 by ぱちゃ »

ありがとうございます。
ググっても見つけられなかったので助かりました :D
Slacko 5.3.1, Racy 5.2.2 Thoshiba Dynabook Satellite J12.
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: 仮想デスクトップのナンバーの取得

投稿記事 by サボり魔 »

その後、時折 jwm のマニュアルを眺めたりしてたのですが、/root/.jwm/jwmrc-personal に記述する <key> 設定で例えば rdesktop のショートカットキーを設定した時に付随して exec: でコードを実行させようとしても無理ぽいですね。
ショートカットには1つの操作しか割り当てられないようです。
<Desktop name="2">(<Desktops> ではなく) 等に入れ子になる <background> で背景を個別に設定できるようです(試してません)。仮想デスクトップごとに背景を変えるということはできるかも。

で、そうこうしているうちに、システム情報を取得する定番の conky ならあっさりと $desktop もしくは $desktop_name で取得&表示できたので拍子抜けしたところです。
何故か $desktop_number では取得できませんでした。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
ぱちゃ
記事: 13
登録日時: 12/01/09(月) 09:42

Re: 仮想デスクトップのナンバーの取得

投稿記事 by ぱちゃ »

サボり魔 さんが書きました:で、そうこうしているうちに、システム情報を取得する定番の conky ならあっさりと $desktop もしくは $desktop_name で取得&表示できたので拍子抜けしたところです。
何故か $desktop_number では取得できませんでした。
すみません書くの忘れていましたが、こちらでは$desktop, $desktop_name, $desktop_numberが取得できなかったので質問させていただきました。
pwidgetのconkeyではできないのかも知れませんね。
Slacko 5.3.1, Racy 5.2.2 Thoshiba Dynabook Satellite J12.
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: 仮想デスクトップのナンバーの取得

投稿記事 by サボり魔 »

ばちゃ さんが書きました:pwidgetのconkeyではできないのかも知れませんね。
あー、こちらのは自分でビルドした野良 PET ですね。挙動が違うのかも。

もしくは機種によるか。
所有してる PC のうち、モノによっては同じ conky でも CPU 温度が取得できないし。

既にばちゃさんの手元で解決しているとは思うのですが、「最終的にこんな風になった」という結果も書いておいていただけると、(私も含め)同じような疑問を持って後日このスレへと辿り着いた方の参考になります。
よろしくお願いします。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
ぱちゃ
記事: 13
登録日時: 12/01/09(月) 09:42

Re: 仮想デスクトップのナンバーの取得

投稿記事 by ぱちゃ »

サボり魔 さんが書きました:既にばちゃさんの手元で解決しているとは思うのですが、「最終的にこんな風になった」という結果も書いておいていただけると、(私も含め)同じような疑問を持って後日このスレへと辿り着いた方の参考になります。よろしくお願いします。
あ~、済みません :oops:
お教え頂いた「xprop -root | grep "_NET_CURRENT_DESKTOP(CARDINAL)"」殆どそのまま使いましたので、参考になるレベルとしては充分かと思っておりましたのと、
解決というよりは妥協している状態でしたので、報告していませんでした。

結果はPwidgetでDesktopNumberというWidgetを作り、
scriptsの中身は

コード: 全て選択

#!/bin/sh
case "$1" in
	-n)
		#Number of desktop
		xprop -root | grep "_NET_NUMBER_OF_DESKTOPS(CARDINAL)" | cut -d "=" -f2 | sed "s/ //g"	
	;;
	*)
		#Current desktop number
		expr `xprop -root | grep "_NET_CURRENT_DESKTOP(CARDINAL)" | cut -d "=" -f2 | sed "s/ //g"` + 1
	;;
esac
として
configsでは

コード: 全て選択

${exec /usr/local/pwidgets/widgets/scripts/DesktopNumber}/${exec /usr/local/pwidgets/widgets/scripts/DesktopNumber -n}
として1秒毎に呼び出しています。
起動後一度はデスクトップを切り替えないと_NET_NUMBER_OF_DESKTOPSが定義されていないので取得できませんが、切り替えて初めて必要になるので問題なしとしました。

できれば切り替えのイベントを拾ってダイアログ表示したいのですが、現時点では諦めています。
JWMの機能としてもオフにされているだけかな?とも思っていますが、見つけられていません。
Slacko 5.3.1, Racy 5.2.2 Thoshiba Dynabook Satellite J12.
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: 仮想デスクトップのナンバーの取得

投稿記事 by サボり魔 »

だいぶ前のことですし、今更感がありますが…。
一応やり方が見つかったため、タスクバーまで非表示にしてしまう全国の表示領域絶対主義者の皆さんの役に立つかもしれませんので報告しておきます。環境は Slacko ではなく Lupu-528JP です。

jwm 設定まわりで出くわしたのは、次のよう制限でした。
  • 1つのキーバインドに複数のショートカットを割り当てられない
  • 動作の指定は基本的に予約語によって設定する
  • rdesktop などはキーを押下で jwm が動作を横取りする(/root/.xbindkeysrc 等で KeyRelease イベントにより続けてコマンドを実行できない)
  • 複数の処理をさせるには予約語「exec」でコマンドを実行するくらいしか
  • rdesktop を実現するコマンドは見当たらない(あったら教えて下さい
結構ややこしくて、あちらを立てればこちらが…的なジレンマに陥ります。

で、(かなり反則技ですが)keyevent を発行するソフトを知ったのがきっかけで解決しました。
crikey というソフトをダウンロードし、make して出来上がった実行ファイルをパスの通ったところに設置しておきます。

そして /root/.jwm/jwmrc-personal に

コード: 全て選択

<Key mask="A" key="Right">exec:r_desktop.sh</Key>
<Key key="Super_R">rdesktop</Key>
と指定しておきます。
上は Alt + 右キーで r_desktop.sh を実行するというもの。
下は rdesktop 機能を別のキーに指定しています。ここでは私が使っていなかった Super_R キーに割り当てています(どのキーでもいいのですが、仮想デスクトップを直接移動させるコマンドが分かっていない以上はこの段階を踏まないとうまくゆかないです)。

続いて 1つ目で実行するよう指定したファイル(r_desktop.sh)を用意します。
パスが通った適当なディレクトリ(/root/my-applications/bin 内とか)に入れておいてください。

コード: 全て選択

#!/bin/sh

(exec crikey -S 250 '\(Super_R\)')

screen_num=$(xprop -root | grep "_NET_CURRENT_DESKTOP(CARDINAL)" | cut -d "=" -f2 | sed "s/ //g")

exec gtkdialog-splash -fg blue -bg green -placement center -fontsize large -timeout 2 -text "screen $screen_num"
jwm が処理を横取りする際に関連したプロセスを殺すようで、サブシェル + exec + -S オプションでディレイをかけることでようやく動きました。
PC の性能によってはディレイの間隔を変えるほうがよいのかもしれません。
ここまでやったら jwm を再起動します(左下の「メニュー」から「デスクトップの修復」もしくは「X サーバをリスタート」)。

流れとしては、
  1. 自分で決めた仮想デスクトップ遷移ショートカットキーを押す
  2. r_desktop.sh が実行される
  3. サブシェルにより、さらに別のキーが押下され rdesktop イベントが発生
  4. 1つ右の仮想デスクトップへと遷移
  5. r_desktop.sh 内の「仮想デスクトップ番号取得」用コードが実行される
  6. 新しい仮想デスクトップ番号を splash で表示
crikey というソフトに依存しまくっているのが癪ですが、「ま〜これでいいかなぁ」と思ってます。
でも、一番簡単なのは Joe(jwm の作者さん)に「1つのキーにキーバインドを複数設定できるようにしておくれよう!」とお願いすることなのかもしれません。

やれやれ :|

ただ、「任意のキーを押したことにできるソフトなんて、(セキュリティ上)入れちゃっていいのか??」という点はちょこっとだけ気になりますね。Enter キーを押したことにもできるし。
まぁ、だからこそ初期設定のコマンドに keyevent や keycode を X ウインドウシステムへと発行するものが見当たらないのかな。
もしそのようなコマンドがあるようでしたら、どなたか教えていただけるとありがたいです。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: 仮想デスクトップのナンバーの取得

投稿記事 by サボり魔 »

あれれ?
-spy オプションを使って

コード: 全て選択

xprop -spy -root | grep "_NET_CURRENT_DESKTOP(CARDINAL)"
で変更のイベントを拾えるのか。やだなぁ

えらい回り道をしてしまいました :oops:

追記
grep すら要らなかった orz

コード: 全て選択

xprop -spy -root _NET_CURRENT_DESKTOP
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

仮想デスクトップのナンバーの取得とナンバー表示

投稿記事 by サボり魔 »

で、勝手にやってるわけですが(面白いお題は追究しますよ)…

シェルスクリプトからの X へのリクエストの方法が思いつかないので、Python を使ってみることにしました。
lupu-528JP では開発環境 devx〜 を sfs で入れておくと Python-2.6 がオマケで入ります。
世の中には Python-Xlib というモジュールがあるとのことで、ダウンロードして Web ドキュメントを読みながらいじってみました。
また、3系の本しか読んだことがないため2系のマニュアルも参照しました。

スクリプトと Python-Xlib モジュールを一緒にした PET を作成してみましたので置いておきます。
----追記---- さんが書きました:翌日コードを書き足しました。
  • シェルスクリプトでラップしていたのを .py ファイル1つで済むようにしました
  • 引数に r でカレントウインドウを道連れに1つ上の番号のデスクトップに移動します
  • 引数に l (小文字のえる)でカレントウインドウと共に1つ下の番号のデスクトップへ
  • 引数なし、もしくは空文字で1つ上の番号のデスクトップに移動(ウインドウは動きません)
  • 動作の追加に伴い、パッケージ名および実行ファイル名を改めました
  • devx が必要なのは変わりありません
  • うう、ウンコードかも…。蓋を取らねば臭わない臭わない。 8)
/root/.jwm/jwmrc-personal への追記サンプル

コード: 全て選択

# Alt + Ctrl + Shift + 右キーで最前面ウインドウと共に移動(右へ)
<Key mask="ACS" key="Right">exec:l_r_desktop.py r</Key>

# Alt + Ctrl + Shift + 左キーで最前面ウインドウと共に移動(左へ)
<Key mask="ACS" key="Left">exec:l_r_desktop.py l</Key>

# Alt + 右キーでデスクトップ(ワークスペース)を右へ移動
<Key mask="A" key="Right">exec:l_r_desktop.py</Key>
まぁ、お好みで。
l_r_desktop_python-0.0.2.pet
インストールして jwmrc-personal の記述を行い、「メニュー」->「シャットダウン」->「デスクトップを修復」を選んで変更を反映させてください。
デスクトップの移動に続いて、移動後のデスクトップ番号(0 始まり)がスプラッシュで表示されます。

jwm を介さずに X へ直接リクエストを送り、その結果が jwm に反映されるという形です。
超非力なマシンでは、プロセスを常駐させて「_NET_CURRENT_DESKTOP」を監視するより(気持ち程度)軽くなるかも。
また、私が上に書いた crikey というソフトを使った方法よりずっと安全かと。

Puppy Linux では Python は敬遠される言語のようなので、他のバージョンの Puppy でも2系の最新(最終)版である 2.7 は入らずに 2.6 のままだった気が(未確認)。
よって、他のバージョンの Puppy でも動くんじゃないかと。

再度書いておきますが、各 Puppy 用の開発環境 devx を入れてあることが前提です。
あーぁ、C が書ければなぁ… :|
添付ファイルを見るにはパーミッションが必要です
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
返信する