他のウィンドウ マネージャーでは装飾の無い CSD (Client Side Decoration) ウィンドウに、awesome では装飾が付くのでこれが付かないようにいじってみ ました。Awesome のバージョンは 3.5.9 です。

out of the box では付箋アプリケーションや、Gtk3 アプリケーションにウィ ンドウ枠が付くと思います。タイトルバーを有効にしている場合はタイトルバー も付くので二重にタイトルバー(Gtk3の場合はヘッダーバーと呼ぶようですが) が付いて具合が悪いです。

CSDウィンドウにWM装飾が付く

これらのアプリケーションのウィンドウは(古より伝わる) _MOTIF_WM_HINTS というプロパティでウィンドウ装飾をして欲しくない事をウィンドウマネー ジャーに伝えています。

Awesome の API にはウィンドウの X プロパティを読む関数(clientget_xproperty メソッド)があるのですが、これは既知の文字列型やブール 型のプロパティしか読めません。

一方、 Xlib How Does This (Removing Window Decoration) Work? - Stack Overflow によると _MOTIF_WM_HINTS の構造は以下のようになっています。

typedef struct Hints
{
    unsigned long   flags;
    unsigned long   functions;
    unsigned long   decorations;
    long            inputMode;
    unsigned long   status;
} Hints;

また、xprop コマンドで装飾の付くべきでないウィンドウのプロパティを見ると、以下のように出ます。

_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x3, 0x21, 0x0, 0x0, 0x0

3つ目の数字が 0 だったら装飾無しを指示していると考えて良いようです。

というわけで、シェル芸でウィンドウに装飾無しヒントが付いているかどうか 判定する関数を書きます。

function is_client_side_decoration (id)
    local code = os.execute("xprop -id " .. tostring(id) .. " _MOTIF_WM_HINTS | awk '{ print $5; }' | grep 0x0, > /dev/null")
    if code == 0 then
        return true
    else
        return false
    end
end

Awesome のバージョンによってやり方が違うと思いますが、自分が使っている バージョンの awesome では rc.lua で “manage” シグナルのハンドラでタ イトルバーを付けるかどうかの処理があるので、ここの if 文

if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then
    -- タイトルバーを付ける処理…

を次のように変更してやれば CSD ウィンドウにタイトルバーが付かなくなります。

if titlebars_enabled and (c.type == "normal" or c.type == "dialog") and not is_client_side_decoration(c.window) then

同様に CSD ウィンドウの時に c.border_width = 0 としてやると枠が付か なくなりますね。がんばってみてください。

CSDウィンドウにWM装飾が付かない