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

DestroyMenuStyle * Fvwm ってエラーになるんだな

DestroyMenuStyle * Fvwm   ##これエラーになる。
MenuStyle * Fvwm

ログを見るとエラーが出てる。

 CMD_DestroyMenuStyle: cannot destroy default menu style. To reset the default menu style use
  MenuStyle * fvwm, Foreground black, Background grey, Greyed slategrey, MenuColorset, ActiveColorset, GreyedColorset

MenuStyleをいじっていたので、どこでエラーがでるのかこのエラーメッセージだと分からないんだな。試してみて分かったのが、DestroyMenuStyle * Fvwmであった。そもそもDestroyMenuStyle * で エラーがでる。デフォルトのメニュースタイルは、Fvwm, Mwm, Winが用意されているが。これはDestroyMenuStyleできませんよ、ということですな。

Fvwm, Mwm, Win reset all options to the style with the same name in former versions of fvwm. The default for new menu styles is Fvwm style. These options
       override all others except Foreground, Background, Greyed, HilightBack, ActiveFore and PopupDelay, so they should be used only as the first option
       specified for a menu style or to reset the style to defined behavior. The same effect can be created by setting all the other options one by one.

       Mwm and Win style menus popup sub menus automatically. Win menus indicate the current menu item by changing the background to dark. Fvwm sub menus
       overlap the parent menu, Mwm and Win style menus never overlap the parent menu.

       Fvwm style is equivalent to !HilightBack, Hilight3DThin, !ActiveFore, !Animation, Font, MenuFace, PopupOffset 0 67, TitleWarp, TitleUnderlines1,
       SeparatorsShort, TrianglesRelief, PopupDelayed, PopdownDelayed, PopupDelay 150, PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight,
       BorderWidth 2, !AutomaticHotkeys, UniqueHotkeyActivatesImmediate, PopupActiveArea 75.

       Mwm style is equivalent to !HilightBack, Hilight3DThick, !ActiveFore, !Animation, Font, MenuFace, PopupOffset -3 100, !TitleWarp, TitleUnderlines2,
       SeparatorsLong, TrianglesRelief, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2,
       UniqueHotkeyActivatesImmediate, !AutomaticHotkeys, PopupActiveArea 75.

       Win style is equivalent to HilightBack, Hilight3DOff, ActiveFore, !Animation, Font, MenuFace, PopupOffset -5 100, !TitleWarp, TitleUnderlines1,
       SeparatorsShort, TrianglesSolid, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, RemoveSubmenus, SubmenusRight, BorderWidth 2,
       UniqueHotkeyActivatesImmediate, !AutomaticHotkeys, PopupActiveArea 75.

FvwmPagerのラベル名

Fvwm3になってFvwmPagerのラベル名が *FvwmPager: Label 0 ラベル名 の様に設定できなくなった。DesktopName 0 デスクトップ名(旧ラベル名)で設定するようになった。StartFunctionのあたりに記述した。

要するにラベル名が指定できなくなって、デスクトップ名が表示される。デスクトップ名はDesktopName コマンドで設定する。

https://github.com/fvwmorg/fvwm3/issues/342

Fvwm3をgdm3でセッションファイルから起動する

/usr/share/xsessions に fvwm3.desktop名で以下のファイルを作る

[Desktop Entry]
Name=Fvwm3
Comment=fvwm3
Exec=/usr/local/bin/fvwm3 -v
#Exec=/usr/local/bin/fvwm3 -v -debug >> ${HOME}/fvwm.log 2>&1
TryExec=/usr/local/bin/fvwm3
Type=Application

/usr/share/xsessions/fvwm3.desktop

この方法だと、-debug >> ${HOME}/fvwm.log 2>&1 のオプションが使えない。どうやったらできるだろう。

-v オプションについて
このオプションで/.fvwm/fvwm3-output.log by default.にログを付け加える。

-v | –verbose

Enables debug logging. Writes in append mode to fvwm log file, which is ~/.fvwm/fvwm3-output.log by default. See ENVIRONMENT section on how to override this location on fvwm3 startup using $FVWM_USERDIR or $FVWM3_LOGFILE .

Logging can also be dynamically toggled on and off using signals:

FVWMをカスタマイズするにあたり、LinuxのWindowManagerの要件とは。

WindowManagerに必要な要件を考える。Linuxのディスクトップ環境を作る為にどうあるのか、何が必要なのかを確認する。Fvwmでは高い自由度でカスタマイズできるからである。

まずはランチャーの役目は欠かせない。マウスで起動させるか、キーボードでターミナルか、ショートカットで起動させるか。また、常用するアプリか、インストールされたアプリか。コマンドからだと、分からないものは、GUIでアイコンで起動させるか。

次にウィンドウの操作がある。どこに配置するか、大きさは、重なり方は。アイコンに収納できるか。自動の部分と、手動の部分があり、マウスで行うか、キーボードで行うか。

次に、情報を表示する部分。アイコン、メモリー、時間、ロードなど。タスクバーの部分とFVWMならボタンの部分、ページャーの部分がある。

つづく

ResizeHintOverrideの罠

ターミナルのソフトを最大表示させると、下部のフレームがズレて隙間ができてしまう。これを解決するのが、ResizeHintOverrideである。文字のリサイズステップサイズを無視するようにするのだ。

ResizeHintOverride instructs fvwm to ignore the program supplied minimum and maximum size as well as the resize step size (the character size in many applications). This can be handy for broken applications that refuse to be resized. Do not use it if you do not need it. The default (opposite) style is NoResizeOverride.

しかし、最大サイズのリサイズはうまくいくが、フレームの端を動かすリサイズはうまく動かない。Style * ResizeOpaqueをデフォルトで使っているのだが。これか?と思いResizeOutlineを使用するとうまく動いた。

Style   *    ResizeOpaque
Style   "Gnome-terminal"        ResizeOutline
Style   "xfce4-terminal"        ResizeOutline
Style   "Gnome-terminal"        ResizeHintOverride
Style   "xfce4-terminal"        ResizeHintOverride

XDGMenuとReadとAddToMenuの関係

メニューにXDGMenuを表示させるには、Readコマンドで.XDGMenuを読み込ませる。

+ I     Read $[FVWM_USERDIR]/.XDGMenu

この.XDGMenuには、第一段階目のXDGMenuという名前のメニューが設定されている。それを変更するために。追加になるんだが。

AddToMenu XDGMenu "XDGMenu_kai" Title
+       "OOOOOOOO" Nop

XDGMenuにタイトルとテストのメニュー名を追加するとする。これをFvwmの設定ファイルにReadコマンドの後に記載すると。これが動作しないのである。困ったものである。どうしたものかと考えて、Readで読ませた設定にはReadで対抗できるのではないかと、推定した。

.XDGMenu_Addというファイルを作り

#DestroyMenu "XDGMenu"
AddToMenu XDGMenu "XDGMenu_kai" Title
+       "OOOOOOOO" Nop

の内容で書き込み。

+ I     Read $[FVWM_USERDIR]/.XDGMenu
+ I     Read $[FVWM_USERDIR]/.XDGMenu_Add

としたら、思ったように動作して、.XDGMenu_Addの内容がメニューに表示された。DestroyMenu “XDGMenu”を記載すると、.XDGMenuの内容は、消され.XDGMenu_Addの内容のみが表示された。このダブルReadテクニックによって、いろいろできそう。

例えば

#DestroyMenu "XDGMenu"
AddToMenu XDGMenu "XDGMenu_kai" Title
+       "OOOOOOOO" Nop
DestroyMenuStyle menu_xdg
MenuStyle menu_xdg  MenuColorset 14
MenuStyle menu_xdg  Font "xft:NotoSerifCJK-Light:size=12"
ChangeMenuStyle menu_xdg XDGMenu

XDGMenuのMenuStyleを変えられる。でもこれXDGMenuの一段目だけなんだよね。二段目以降はメニュー名が日本語だし、たくさんあるし、どうするの?

DestroyMenuStyle * 
MenuStyle * Mwm
MenuStyle * MenuColorset 1
MenuStyle * Font "xft:NotoSerifCJK-Light:size=18"

.XDGMenu_Addにアスタリスクのメニュスタイルを設定すると、XDGMenuでない他のメニューのスタイルも変わってしまう。そりゃそうだけど。アスタリスクに関しては、全部影響するという訳だった。じゃどうする?宿題だな。

FVWM3 メニュー keyバインディング

PopupとMenuの違いは何だろう?同じように動作するのだが。

key F11         A       M       Popup XDGMenu
key F12         A       M       Menu XDGMenu
      Types of Menus
           In fvwm there are four slightly different types of menus:

           Popup menus can appear everywhere on the screen on their own or attached to a part of a window.The Popup command opens popup menus. If the popup menu was invoked with a mouse button held down, it is closed when the button is released. The item under the pointer is then activated and the associated action is executed.

           Menu is a very similar command, but the menus it opens are slightly less transient. When invoked by clicking a mouse button, it stays open and can be navigated with no button held. But if it is invoked by a button press followed by mouse motion, it behaves exactly like a popup menu.

XDGMenuの場合は違いが分からなかった。AddToMenuで作られたMenuをマウスクリックで呼ぶ場合は、Popupの時は、右側にMenuが開く。Menuの時は、クリックなりリターンなりでアクションがあったらMenuが単独で開く、そんなところでした。

では、なんでXDGMenuだと違ったの? これ宿題

それでは、マウスでメニューを開くとする。以下をAddToMenuに記載し、メニューを開くとPopupの方は、右横にXDGMenuの中身が開いて表示される。Menuの方はクリックすると開く。その違いであった。

+ "XDG Menus" Popup XDGMenu
+ "XDG Menus" Menu XDGMenu

が、しかし一番上に記載した、キーで呼ぶ場合には、同じ挙動なんですな。これは不思議。つまりキーでメニューを呼びだす時は、PopupもMenuも同じ動作をする。これは1段目のメニューだからそうなるのであろう。2段目は違うぞ? これ宿題

fvwm3のインストール

「FVWM version 3 — the successor to fvwm2」が公開されているが、現在UbuntuにはFvwm3のパッケージは存在しない。https://packages.ubuntu.com/

待っていても、パッケージでは提供されないのだろうか。と言う訳でコンパイルしインストールを行う。

https://github.com/fvwmorg/fvwm3/blob/master/dev-docs/INSTALL.md ここを参考に、Core dependenciesとOptional dependenciesをインストールしておく。
librsvg-devがなくてlibrsvg2-devがあったので、これをインストールしてみた。大丈夫?

#!/bin/bash
while read line
do
echo -e "\e[32;1m$line\e[m"
sudo apt install $line -y
done << EOF
libevent-dev
libx11-dev
libxrandr-dev
libxrender-dev
libxt-dev
asciidoctor
libfontconfig-dev
libfreetype6-dev
libfribidi-dev
libncurses5-dev
libpng-dev
libreadline-dev
librsvg2-dev
libsm-dev
libxcursor-dev
libxext-dev
libxft-dev
libxi-dev
libxpm-dev
sharutils
EOF

準備ができたらgitからダウロード

git clone https://github.com/fvwmorg/fvwm3.git

あとはInstalling From Gitの手順で

./autogen.sh
./configure --enable-mandoc 
make

configureでWith Golang support? noになったが、まぁいいか。

じゃないわ! FvwmPrompt — a new module written in golang: ./configure --enable-golang needed at compile time だとさ。
で、以下のconfigureでyesになった。

./configure --enable-mandoc --enable-golang

つまりこういう事である。

/autogen.sh && ./configure --enable-mandoc --enable-golang && make -j4

さらに改良。Makefileに、CPPFLAGS = -march=amdfam10 追加。k10なのよ。
でmake clean && make -j4

sudo make install

インストールできたら、 .xinitrcのfvwm2の部分をfvwm3に書き換えて。startxする。
何が変わったのかはここを読むといい。https://github.com/fvwmorg/fvwm3/releases

fvwm3では、Strokeコマンドがなくなった。libstroke support has been removed.だと。
あまり使わないので、まぁ影響はないけど。キーとマウスクリックで対応できるでしょうから。Strokeは設定ファイルからコメントアウト。あとEdgeResistance 30 30でエラー、引数は1つのみが正解。何か2つ目の引数って効果あるの?ってずっと思ってた。EdgeResistance 30が正しいと、-vオプションのエラーログで分かった。

logを取るには.xinitrcで起動時に fvwm3 -v と -vのオプションを付けると、$HOME/.fvwm/fvwm3-output.log が作られる。起動中では pkill -USR2 fvwm3 ができる。

Fvwm3のモジュールは以下のとおり

FvwmAnimate
FvwmAuto
FvwmBacker
FvwmButtons
FvwmCommandS
FvwmConsole
FvwmConsoleC
FvwmEvent
FvwmForm
FvwmIconMan
FvwmIdent
FvwmMFL
FvwmPager
FvwmPerl
FvwmRearrange
FvwmScript
FvwmTalk

fvwm2.6.8のモジュールは以下の通り。○は存続、×は消滅したもの。

FvwmAnimate ○
FvwmAuto ○
FvwmBacker ○
FvwmBanner ×
FvwmButtons ○
FvwmCascade ×
FvwmCommandS ○
FvwmConsole ○
FvwmConsoleC ○
FvwmConsoleC.pl ×
FvwmCpp ×
FvwmEvent(FvwmAudio) ○
FvwmForm ○
FvwmIconMan ○
FvwmIdent ○
FvwmM4 ×
FvwmPager ○
FvwmPerl ○
FvwmProxy ×
FvwmRearrange ○
FvwmScript ○
FvwmTalk ○
FvwmTile ×

fvwm2.6.8はfvwm2.6の最終安定版ですね。
こちらでも絶版があるわけですが。FvwmTaskBarが無くなったのが大きかったかな。

  - Some fvwm modules have been removed:
      - FvwmDragWell   (no replacement)
      - FvwmGTK        (no replacement)
      - FvwmSave       (no replacement)
      - FvwmSaveDesk   (no replacement)
      - FvwmScroll     (no replacement)
      - FvwmTabs       (no replacement, never worked anyway)
      - FvwmTaskBar    (use FvwmButtons)
      - FvwmTheme      (in core of fvwm as colorsets)
      - FvwmWharf      (use FvwmButtons)
      - FvwmWinList    (use WindowList command)
      - FvwmWindowMenu (use WindowList command)
      - FvwmIconBox    (use the IconBox style instead)

FVWM2のPositionPlacement

FVWM2でFirefoxを使用していると。URLの左横の鍵アイコンをクリックして、安全な接続の詳細を表示するをクリックするとページ情報が新たなウィンドウで表示されるのだが。わしは、Style * PositionPlacement UnderMouse と設定しているので、左上のマウスのそばにウィンドウが表示される訳だが、これを画面の中央に表示させたい。

この表示させたいウィンドウをIdentifyで調べると Class: は Firefoxで Resource:は Browserであった。それで Style “Browser” PositionPlacement Centerと設定したのだが、中央に表示されるはずが、表示されない。困ったものだ。

他の方法として Style “Browser” PositionPlacement 50-50w 50-50w と設定したところ。中央に表示されてうまく行ったのである。この50-50wの意味は、左はX方向、右はY方向。最初の50は50%を表し、50 50だと、ウィンドウの左上の点が画面の50%50%に来るので全体としては右下にずれて表示が見える。これを防ぐためにウィンドウ左上の点を左上に移動させないとならない。これが-50wという記述をつけるとできるのだ。意味はウィンドウサイズの50%をマイナスするという事なのである。FVWMの座標の原点0 0は左上にある。

XDG Menusの動作が変

Regenerationを行っても再起動すると、古いMenuに戻ってしまう。設定が変わった?

これを解決するのには、古い .XDGMenuファイルを削除して新しく .XDGMenuのファイルを作ると、正常に動作するようになった。

fvwmのメニューからFvwmForm-XDGMenu-Config(Module FvwmPerl -l fvwm-menu-desktop-config.fpl)(FvwmCommand Module FvwmPerl -l fvwm-menu-desktop-config.fpl) を起動 Output pathを .fvwm2rcの .XDGMenuのファイルを読み込むパスと同じパスに設定する。
ちなみにこのモジュールのパスは/usr/share/fvwm/fvwm-menu-desktop-config.fplである。解析するにはここから。

古い環境からの .XDGMenuは削除し、XDGRegenで新しく作るのが良いという事であった。