ドスパラのVF-AD4でplymouth後のOEMロゴを非表示にする

LinuxMint20.1をインストールしたが、plymouthが表示される前と表示された後にOEMロゴが出て、なんか格好悪いので、plymouth後のロゴは非表示にしたい。

…
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fbcon=nodefer"
…

OEMロゴは出なくなったけど、「drm:intel_cpu_fifo_underrun_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun」とか出るようになった。よく分からないし、普通に動くので下記のように追記して非表示にする。

…
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fbcon=nodefer loglevel=0"
…

Ubuntu18.04で特定のウィンドウに常にフォーカスを与える

端末を1つの用途(アプリケーション)専用にする場合、キーボード操作を常に1つのウィンドウで処理したい場面が結構ある。もっとスマートな方法があるだろうけど、とりあえずwmctrlコマンドをcronに登録して1分ごとに専用ウィンドウにフォーカスを行うことにした。

wmctrlのインストール。

# apt install wmctrl

cronに登録。

* * * * * export DISPLAY=:0 && /usr/bin/wmctrl -a ウィンドウタイトル

LibreOfficeでPostgreSQLデータベースにJDBCで接続

On Error Goto ErrorHandler
'Properties
Dim properties(2) As New com.sun.star.beans.PropertyValue
properties(0).Name = "user"
properties(0).value = "UserName"
properties(1).Name = "password"
properties(1).value = "Pass"
properties(2).name = "JavaDriverClass"
properties(2).value = "org.postgresql.Driver"
'Driver manager
Dim driverManager As Object
driverManager = createUnoService("com.sun.star.sdbc.DriverManager")
'Connection
Dim connection As Object
connection = driverManager.getConnectionWithInfo("jdbc:postgresql://192.168.0.1:5432/database-name", properties())
'Statement
Dim statement As Object
statement = connection.createStatement()
'Execute and number of update records
Print statement.executeUpdate("DELETE FROM table1;")
'ResultSet
Dim resultSet As Object
resultSet = statement.executeQuery("SELECT * FROM table2;")
While resultSet.Next
    Print resultSet.getString(1)
Wend
'Close
statement.close()
connection.close()
connection.dispose()
Exit Sub
'Error handle
ErrorHandler:
If IsNull(statement) = false Then
    If statement.isClosed() = false Then
        statement.close()
    End If
End If
If IsNull(connection) = false Then
    If connection.isClosed() = false Then
        connection.close()
        connection.dispose()
    End If
End If
If InStr(Error$, "org.postgresql.Driver") > 0 Then
    MsgBox("ツール→オプション→LibreOffice→詳細→クラスパスからPostgreSQLのJDBCドライバーを追加してください。", 64, "初期設定")
Elseif Len(Error$) > 0 Then
    MsgBox(Error$, 16, "エラー")
End If

LibreOffice Calcでダイアログを作成して表示する

「ツール」→「マクロ」→「ダイアログの管理」から追加した”Dialog1″を表示してダイアログ内のテキストフィールドの値を取得するコード。ちなみにダイアログをコードで閉じるにはdialogオブジェクトのendexecute()メソッドを呼ぶ。

'Show dialog
DialogLibraries.LoadLibrary("Standard")
dialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
dialog.execute()
'Get text
Dim textField As Object
textField = dialog.getControl("TextField1")
Dim value As String
value = textField.getText()

KDE neonのEclipseがエラーを繰り返し表示する

新たにKDE neonをクリーンインストールした状態でEclipseを起動して、.javaを編集すると下記のエラーが繰り返し表示され、使えなかった。色々調べてみたけど、どうも汎用的なメッセージらしく、1つずつ試した結果、結局はインプットメソッドの設定が不十分なことが原因だった。アホくさい。

org.eclipse.swt.SWTError: No more handles
	at org.eclipse.swt.SWT.error(SWT.java:4725)
	at org.eclipse.swt.SWT.error(SWT.java:4614)
	at org.eclipse.swt.SWT.error(SWT.java:4585)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:532)
	at org.eclipse.swt.widgets.Control.drawBackground(Control.java:235)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:6800)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6132)
	at org.eclipse.swt.internal.gtk.GTK._gtk_main_do_event(Native Method)
	at org.eclipse.swt.internal.gtk.GTK.gtk_main_do_event(GTK.java:4166)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1429)
	at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
	at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1585)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4661)
	at org.eclipse.ui.statushandlers.WorkbenchErrorHandler.showStatusAdapter(WorkbenchErrorHandler.java:84)
	at org.eclipse.ui.statushandlers.WorkbenchErrorHandler.handle(WorkbenchErrorHandler.java:52)
	at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handle(IDEWorkbenchErrorHandler.java:105)
	at org.eclipse.ui.internal.WorkbenchErrorHandlerProxy.handle(WorkbenchErrorHandlerProxy.java:34)
	at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:214)
	at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:256)
	at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:266)
	at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopException(WorkbenchAdvisor.java:325)
	at org.eclipse.ui.internal.Workbench$1.eventLoopException(Workbench.java:488)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.handle(PartRenderingEngine.java:1195)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1185)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:635)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:155)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1468)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1441)

下記コマンドで不足している言語パッケージをインストールする。

# apt install $(check-language-support)

使用するインプットメソッドにfcitxを指定して再起動したら直った。

$ im-config -n fcitx

Ubuntu18.04ですべてのkernelを削除してしまった場合の対処

すべてのkernelを削除すると、GRUBから起動できなくなるので、OSのインストールメディアでブートして、そのターミナルでkernelを再インストールする。

kernelのインストール作業

まずはインストールするドライブを特定する。下記のコマンドを実行してインストール対象のドライブラベルを確かめる。自分の環境では “nvme0n1p2” でした。

$ lsblk

次に特定したドライブを/mnt/にマウントする。

# mount /dev/nvme0n1p2 /mnt/

更にインストールに必要なディレクトリやファイルをマウント、バインドする。

# mount -o bind /dev/ /mnt/dev/
# mount -o bind /dev/pts/ /mnt/dev/pts/
# mount -t sysfs /sys/ /mnt/sys/
# mount -t proc /proc/ /mnt/proc/
# cp /etc/resolv.conf /mnt/etc/resolv.conf

chrootを実行してからパッケージリストを更新する。

# chroot /mnt/
# apt update

あとは普通にkernelをインストールする。自分はkernelのバージョン5.3.0-51をインストールした。

# apt install linux-headers-5.3.0-51
# apt install linux-headers-5.3.0-51-generic
# apt install linux-image-5.3.0-51-generic
# apt install linux-modules-5.3.0-51-generic
# apt install linux-modules-extra-5.3.0-51-generic

GRUBの設定を更新してインストールしたkernelを示すことを確認する。

# update-grub

Ctrl+Dでchrootを解除し、下記のコマンドでマウントを解除する。

# umount /mnt/dev/pts/
# umount /mnt/dev/
# umount /mnt/sys/
# umount /mnt/proc/
# umount /mnt/

再起動して正常に起動することを確認。

Thinkpad X395のUbuntuが放電状態で起動するとフリーズする問題

環境

OS: Ubuntu 20.04
カーネルバージョン: 5.4.0-29-generic
プロセッサ: 8 × AMD Ryzen 5 PRO 3500U w/ Radeon Vega Mobile Gfx
メモリ: 13.6 GiB of RAM

対策

どうやらRyzenのIOMMU関連が原因のようで、カーネルのオプションにiommu=softを追加する必要がある。iommu=offだと何らかのIOMMUサポートが必要なデバイスが動かないらしい。

…
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=soft"
…

/boot/grub/grub.cfgを更新する。

# update-grub