WPP
apt で “N: There are 2 additional versions. ….” が表示されて apt upgrade できないとき

今日 apt list –upgradable すると “N: There are 2 additional versions. …” とメッセージが表示され、upgrade できない現象に出会いました。

ネットを検索すると There are 2 の部分が 1 とか 3 とかで見つかったので一定数、同じ問題で困った人がいるようです。

今回 upgrade できなかったのは、snapd/jammy-updates ですが、その適宜メッセージでレポートされたパッケージにしてください。

$ sudo apt --only-upgrade install snapd/jammy-updates

参照

List Upgradable Packages With apt Command in Ubuntu

Firefox でページ上の QR をスキャンするアドオン “QR Lite”

最近は QR コードが URL の変わりに使われることが多くなりました。カメラ経由でスキャンするケースでは、スマホも PC も大して変わりません、楽ですよね。

今日はスライド共有サイトを見ていて表示された QR コードをなんとかしたいので QR Lite というアドオンを見つけたという話です。

QR Lite – Get this Extension for 🦊 Firefox (en-US)

機能

  • QR コードの生成
  • カメラから QR 読み込み
  • ブラウザ表示中の QR をスキャン

使い方は簡単なので、特に説明しません。

QR を生成するアドオンは無数にあり、多くが画像ファイルのスキャンができるようで。しかし、画面上のQR をスキャンできるものは少ないです。

VScode で pipenv 環境を認識できないとき

ひさびさに python をいじろうと思ったら VScode で認識できなかったのを対処した話です。

まあ pipenv に限らず、python インタプリタを認識しないとき全般同じ対策です。

手順

プロジェクトのフォルダに .vscode/settings.json ファイルがあるはず。なければ .vscode フォルダも含めて作ります。

ファイルに “python.pythonPath” キーを追加しインタプリタのフルパスを設定してやります。

今回は、プロジェクトフォルダ内に pipenv の環境を作ったので .venv フォルダ以下の python を指定してやります。

こんな感じです。

{
 ... 設定済みの値が並んでいたら適当な位置に追加する
  "python.pythonPath": "d:/projects/xxxx/.venv/Scripts/python.exe"
}

これで認識するようになります。

それはそれでいいのだけれど、どうして自動で認識する時としない時があるのか VSCode の挙動は未だに謎が多い。

Android の Firefox で小さすぎる文字を拡大する

Android の Firefox でネットを見ているとたまにとても文字が小さいサイトがあって拡大できないことがあると思う。そんな時 Tampermonkey とそこで動くスクリプトを書くと問題を解決できることがある。

Tampermonkey は、ブラウザの機能拡張で任意の Javascript を動かせるようになる。書くのが面倒ではあるがこれを使うとブラウザ画面上の表示や操作を改変することができる。スマホブラウザでこれができるのは知る限りAndroid + Firefox の組み合わせだけ、PC なら chrome 系ブラウザでも同様のことができる。

また、Tampermonkey は変遷があって過去には Violetmonkey とかいろいろ xxx monkey に主流がうつっているが最近は Tampermonkey で落ち着いている模様。

自分は正直、ブラウザで動く Javascript を書くのは得意でもないし好きでもない。ただただ面倒なので Claude か Bing Copilot に書いてもらった。

最初に文字を10 % 大きくするスクリプトを生成し、後から大/小ボタンを追加するコードを生成してもらった。

それらをそれぞれ動作確認して、くっつけたのが以下。

@match の行を適当に対象サイトに絞り込むように設定するとそのマッチするサイトでだけスクリプトが動くようになる。

// ==UserScript==
// @name         文字サイズを調整する
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  サイト全体の文字を10%大きくし、文字サイズを調整するボタンを追加します
// @author       You
// @match        *://*/*
// @grant        none
// ==/UserScript==

// http://*/*
(function() {
    'use strict';

    // 全ての要素を取得
    var all = document.getElementsByTagName("*");

    // 各要素のフォントサイズを10%大きくする
    for (var i=0, max=all.length; i < max; i++) {
        var style = window.getComputedStyle(all[i], null).getPropertyValue('font-size');
        var fontSize = parseFloat(style);
        all[i].style.fontSize = (fontSize * 1.1) + 'px';
    }

    // ボタンを作成する関数
    function createButton(value, scale) {
        var button = document.createElement("button");
        button.innerHTML = value;
        button.style.margin = '4px';

        button.onclick = function() {
            for (var i=0, max=all.length; i < max; i++) {
                var style = window.getComputedStyle(all[i], null).getPropertyValue('font-size');
                var fontSize = parseFloat(style);
                all[i].style.fontSize = (fontSize * scale) + 'px';
            }
        };
        //document.body.appendChild(button);
        document.body.insertBefore(button, document.body.firstChild)
    }

    // ボタンを作成
    createButton("文字を小さく", 0.95);
    createButton("文字を大きく", 1.05);
})();

参考

以下に、いろいろなユーザスクリプトがあるのでダウンロードして使うのもいい。

OpenUserJS アクセス制限が厳しく 10 秒に一回くらいしかリクエストできないので注意

Greasy Fork – safe and useful user scripts

Github の TOTP に別の端末を追加する

Github の 2FA で TOTP アプリの認証を複数端末に追加するとき、少しハマったのでメモします。

複数のスマフォだったり、別のブラウザのTOTPプラグインで認証しようとする時に Github の場合は QR コードをスキャンした直後に VERIFY をしないとその QR コードはアクティブにならないようだ。

手順

Github にログインし、 settings に入る。

Password and authentication に進み、Authenticator app で Edit をクリックする。

TOTP アプリやプラグインで QR コードをスキャンする。

TOTP アプリやプラグイン表示されたコードを [Verify the code from the app] に入力して [save] をクリックする。

これで、認証する端末を追加できた。

アマゾンやマイクロソフトアカウントと異なり、Github は端末ごとに別の認証コードを生成ようです。

Linux Mint 21.3 Cinnamon でデスクトップのメニューバーが表示しなくなったのを修復した話

タイトルにある通り Linux Mint + Cinnamon を使っているのですが、普段はノート PC に外部ディスプレイをつなぎ2画面で使用しています。

その際、デスクトップのメニューバー(仮)、Windows でいう所の タスクバーの位置をいじっているうちに PC 側の画面には表示しなくなってしまったトラブルに遭遇しました。

メニューバー(仮)は正式には panels という名称のようです、恐らく以前の cinnamon バージョンでは launcher と呼んでいたようですが、それは廃止されるもののようです。

dconf-editor で /org/cinnamon/panales-enabled というキーがパネルの位置を示す設定値のようで [‘1:1:bottom’] となっていました。これが意味するところは パネル1: モニタ1:下 を示すらしい。

dconf-editor の説明によるとモニタは 0 から始まる数値といっており、外部ディスプレイがない状態では、0になるということのようです。

そこでモニタを 0 に変えて [‘1:0:bottom’] とするとどっかにいっていたメニューがデスクトップ下部に帰ってきました。

この設定を手動でいじった記憶はないのでこれバグだと思う。同様の事象に出会った人の助けになればうれしく思う。(恐らくそれは未来の自分になるだろう。)

English

If you meet Cinnamon Panels gone to extend display on Linux Mint 21.3, You can fix location of panels by dconf-editor.

Key: /org/cinnamon/panels-enabled

value [‘1:0:bottom’] – bottom can replace to top (maybe left or right too).

I hope your help.

Linux Mint 21.3 で Wine9 を公式リポジトリからインストールする

Linux Mint のリポジトリに含まれる Wine は 6.1 と古いので公式からインストールできるように設定し直します。

自分の知識不足が原因だと思うが、リポジトリのソース URL を探すのはちょっと面倒なことが多い。 Linux Mint 21.3 の場合は Ubuntu のコードネーム jammy に相当するのでその URL を探してくる必要がある。

; Wine をインストールしたことがあれば不要かもしれない
$ sudo dpkg --add-architecture i386

$ sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key

$ sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources

$ sudo apt update
$ sudo apt install --install-recommends winehq-stable

$ wine --version
wine-9.0

Ubuntu コードネームは /etc/os-release で確認できる。

$  cat /etc/os-release 
NAME="Linux Mint"
VERSION="21.3 (Virginia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 21.3"
VERSION_ID="21.3"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=virginia
UBUNTU_CODENAME=jammy

参考

Linux Mint 21にWine 8をインストールする方法

Linux Mint で Kensington トラックボールにキーボードショートカットを割り当てる(その2)

追記: Bluetooth(再)接続時に設定を反映させるように変更した。

その1」で、ボタンの配置を変更したので、「その2」ではショートカットキーの割当てていきます。

ツールを少し整理していきます。

xbindkeys:
ここでは、マウスボタンが押されたときに、どのキーが押されたかをエミュレートするのに使います。
.xbindkeysrc ファイル:
xbindkeys の設定をここに書きます。(マウスボタンとキーの対応づけをします。)
xte、xvkbd:
.xbindkeysrc の中で指定します。これらのプログラムが実際のキーコードを送り出す処理をしているようです。

xdottool:
今回は使っていないが xte、xvkbd と同じように使うことができる xdottool というものがあるらしい。

最終的な割当状態

今回は残っている、上段:右ボタンにショートカットキーを割り当てます。

上段戻るタブを閉じる(Cntrol + W)
下段左クリック右クリック

結果からいうと xte を使いました。xvkbd だと何故か firefox はタブを閉じずに、ウィンドウそのものを閉じる現象が発生したのですが、xte なら目的の動作を実現できました。

ショートカットを割り当て

どうやら、.xbindkeysrc ファイルを書いて xbindkeys コマンドを実行すれば目的の動作は達成するようです。早速やってみます。

$ cd ~
$ vi .xbindkeysrc

"xvkbd -text "\[Control]W""
  b:10
:wq

$ xbindkeys

これで動いているはずですが、Firefox だと何故かタブではなくウィンドウ全体が閉じてしまいます。「がとらぼ」さんによると xte なら動作するケースむあるようなので xte に変更してみる

$ cd ~
$ vi .xbindkeysrc

# "xvkbd -text "\[Control]W"" # コメントアウト
"xte 'keydown Control_L' && xte 'key w' && xte 'keyup Control_L'"
  b:10

:wq

$ xbindkeys

動作しているか怪しいときは -n オプションでデバッグできる

$ killall xbindkeys; xbindkeys -n

ただ今回のコマンドは、タブを閉じちゃうのでターミナルでなかなか試しづらいかもしないです。

前回と同じように、.profile に設定を追加します。

その1」にも追記しましたが、/etc/udev/rules.d にルールファイルを追加しました。なのでルールファイルで指定したスクリプトにキーボードショートカットのマッピングを追加します。

$ cd 
$ touch slimblede.sh ; chmow 755 slimblade.sh
$ vi slimblade.sh
mouse_id='SlimBlade Pro'
xinput set-button-map "$mouse_id" 1 8 3 4 5 6 7 10 9

xinput
:wq

これでようやくできました。

参考

Linuxでマウス/トラックボールのボタン割当て変更 – がとらぼ

全てのマウスボタンを動作させる – ArchWiki

Xbindkeys – ArchWiki

xbindkeys/xteで任意のマウスボタン(キー)で任意のキーストロークが動くようにした(Keisingtonトラックボールのボタンをカスタムした) – Lambdaカクテル

Linux Mint で Kensington トラックボールにキーボードショートカットを割り当てる(その1)

追記: Bluetooth(再)接続時に設定を反映させるように変更した。

タイトルで説明しきれていないが、実はやりたいことが 2 つありまして

  • 1つ目は、ボタンの配置を変更したい。
  • 2つ目は、ボタンの一つにブラウザのタブを閉じるショートカットを割り当てる。

ちょっと長くなるので前半の「その1」でボタンの配置変更、「その2」でショートカットキーの割当てを記事にしていきます。

使うツールがいつくかあるので少し整理していきます。

xinput:
ここでは、マウスボタン再割当て、無効化をします。
xev:
マウスボタンが xinput のどの番号にアサインされているか確認します。

最終的な割当状態

今回設定する Kensignton Slimblade トラックボール には、4つの物理ボタンがあります。

ほぼすべてのトラックボール製品でボール部分のクリックはできないので便宜上別のボタンにマウスでいう中央クリックの役割をもたせています。でも中央クリックって使わなくないですか?少なくとも自分は使いません。

なのでそれを以下のように設定していきます。

上段戻るタブを閉じる(Cntrol + W)
下段左クリック右クリック


Mac や Windows で Kensington のトラックボールを使用する際はメーカー製の GUI ソフトでよしなにできるのですが、それに近い結果を目指します。

ボタン配置の変更

配置の変更にかかる前に現状を把握していきます。

$ xinput -list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer        	id=4	[slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad      	id=12	[slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech TrackPoint    	id=13	[slave  pointer  (2)]
⎜   ↳ SlimBlade Pro                           	id=15	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard     	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	    id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ Sleep Button                            	   id=9	[slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C         	id=10	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=11	[slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                  	id=14	[slave  keyboard (3)]

; SlimBlade Pro id=15 が見つかったので、そのボタンの割当状況を確認します。
$ xinput get-button-map 15
1 2 3 4 5 6 7 8 9

でここで出てきた 1 – 9 はこんなボタンがあるって意味らしい

1: 左クリック
2: 中央クリック
3: 右クリック
4: ホイール前
5: ホイール後
6: ホイール左右のどちらか
7: ホイール左右のどちらか
8: 戻る
9: 進む
10以上: Fn1、Fn2って続くらしい。。(ここ と StackOverFow でそんな書き込みを見た、出典知っている人がいたら教えてほしい)

でこの番号がどのボタンに割り当てられているか確認する必要がある。(動かした時の挙動でおおよそわかるはずだが確認しておく。)

xev を起動すると小さなウィンドウが表示される。ここにカーソルを持っていき、ボタンをクリックすると下のような感じでログメッセージが流れる。

$ xev -event button
Outer window is 0x5800001, inner window is 0x5800002

ButtonPress event, serial 25, synthetic NO, window 0x5800001,
    root 0x6ca, subw 0x0, time 66502224, (113,56), root:(2007,2320),
    state 0x0, button 1, same_screen YES

ButtonRelease event, serial 25, synthetic NO, window 0x5800001,
    root 0x6ca, subw 0x0, time 66502252, (113,56), root:(2007,2320),
    state 0x100, button 1, same_screen YES

クリックしたボタンによって、button1 の部分がそれぞれ異なるものが出てくる。

まとめるとこんな感じに割り当てられていることがわかった。

2 | 8 上段は、2: 中央クリック、8 戻る
——-
1 | 3 下段は、1:左クリック、3: 右クリック

上段左に「戻る」、右に「fn1」 を割り当てる

$ xinput set-button-map 15 1 8 3 4 5 6 7 10  9

このあと、上段右の 10 は他のキーコードを割り当ててしまうので本当はなんでもいいかもしれない。

これを再起動時にも反映させるために ~/.profile に以下の行を追加した。

有線の場合は、起動時に必ずアクティブなので .profile や .xprofile でいいようだが Bluetooth 接続の場合はサスペンドから復帰した時や、省電力モードに入って接続が切れると元に戻ってしまうようだ。

$ cd ~
$ vi .profile

; 以下を追加

;  自分のマウスにより変更してください
mouse_id='SlimaBlade Pro'
xinput set-button-map "$mouse_id" 1 8 3 4 5 6 7 10 9

:wq

Arch のページを参考に /etc/udev/rules.d/90-slimblade-wakeup.rule を作成した。 lsusb でPC 側のBluetoothデバイスの Vendoer:Product が 8087:0029 だと確認できたのでルールは以下のようにした。

$ cd /etc/udev/rules.d
$ vi 90-slimblade-wakeup.rule
SUBSYSTEM="usb",ATTRS{iVendor}=="80807",ATTRS{iProduct}=="0029" RUN=+"/home/[ユーザー名]/slimblade.sh"
:wq

以前 .profile に追加した設定部分を slimblade.sh に切り出す

$ cd 
$ touch slimblede.sh ; chmow 755 slimblade.sh
$ vi slimblade.sh
mouse_id='SlimBlade Pro'
xinput set-button-map "$mouse_id" 1 8 3 4 5 6 7 10 9

参考

Bluetooth – ArchWiki

Linuxでマウス/トラックボールのボタン割当て変更 – がとらぼ

Linuxでマウスのクリックボタンを変更| xinput set-button-map – shangtian’s blog

LinuxでKensington Expert Mouseのボタン配置を変更する | fukata.dev