以下の内容はhttps://touch-sp.hatenablog.com/entry/2024/05/12/191752より取得しました。


WSL2で複数のインスタンスを作成したら起動が面倒くさくなってきたので、選択・起動が簡単にできるようにPySide6でGUIを作りました。


はじめに

WSL2上のUbuntuを使ってLLMを使ったり、画像生成したり、動画生成したりしています。

Ubuntu環境がごちゃごちゃになるのが嫌なので、その都度新規のUbutnu環境を作っています。

ストレージに余裕があるので、力技です。

これができるのがWSL2のいいところでしょうか。

CUDAのバージョンごとにUbuntuを複製するのもわかりやすくてGoodです。

方法は以下の記事を参考にしています。
laboradian.com
だんだん選択して起動するのが面倒くさくなってきたので、冒頭のGUIを作りました。

一覧から選択してボタンを押すと、指定のUbuntuが起動してくれます。

Pythonスクリプト

from PySide6.QtWidgets import (
    QApplication,
    QMainWindow, 
    QWidget, 
    QListWidget, 
    QListWidgetItem, 
    QPushButton, 
    QVBoxLayout
)
import subprocess
import sys

def get_wsl_distributions():
    try:
        output = subprocess.check_output(["wsl", "-l", "-v"])
        return output
    except subprocess.CalledProcessError as e:
        print(f"Error executing command: {e}")
        return None

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):

        distributions = get_wsl_distributions()

        if distributions:
            distributions = distributions.decode()
            distributions = distributions.replace("*", " ")
            distributions = distributions.replace("\x00", "")

            d_list = [x.strip() for x in distributions.splitlines() if x.strip() != ""]
            n_list = [x.split()[0] for x in d_list[1:]]
        else:
            print("Unable to retrieve WSL distributions.")
            sys.exit()
        
        self.list_widget = QListWidget()
        for kernel in n_list:
            item = QListWidgetItem(kernel)
            self.list_widget.addItem(item)
        
        self.button1 = QPushButton("start")
        self.button1.clicked.connect(self.pushed)

        layout = QVBoxLayout()
        layout.addWidget(self.list_widget)
        layout.addWidget(self.button1)

        mainwidget = QWidget()
        mainwidget.setLayout(layout)

        self.setCentralWidget(mainwidget)
    
    def pushed(self):
        selected_kernel = self.list_widget.currentItem()
        subprocess.Popen(["wsl", "-d", selected_kernel.text(), "-u", "hoge"])
        sys.exit()

if __name__ == "__main__":
    app = QApplication([])
    window = Window()
    window.show()
    app.exec()







以上の内容はhttps://touch-sp.hatenablog.com/entry/2024/05/12/191752より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14